Amazon AWS EC2 마이크로 인스턴스의 Python CGI – 사용법!


23

EC2 마이크로 인스턴스가 lighthttpd의 CGI 스크립트를 제공하도록하려면 어떻게해야합니까? 예를 들어 Python CGI?

반나절 걸렸지 만 lighttpd 서버를 사용하여 무료 Amazon AWS EC2 마이크로 인스턴스에서 실행되는 Python cgi를 얻었습니다. 나는 동료 멍청한 놈들이 모든 단계를 한곳에 두는 데 도움이 될 것이라고 생각합니다. 아래의 간단한 단계로 무장하면 설정하는 데 15 분 밖에 걸리지 않습니다!

경험이 많은 사용자가 이것을 읽고 내 질문은 : 내가 한 일에 보안 결함이 있습니까? (파일 및 디렉토리 권한을 참조하십시오.)

1 단계 : EC2 인스턴스를 시작하고 시작합니다.

[분명히 Amazon EC2에 가입하고 키 페어를 * .pem 파일에 저장해야합니다. 아마존이 그 방법을 알려 주듯이, 나는 이것을 다루지 않을 것이다.]

  1. AWS 계정에 로그인하고 EC2 인스턴스를 시작하십시오. 웹에는이 작업에 대한 자습서가 있습니다. 아마존이 제시하는 기본 인스턴스 크기는 "작음"입니다. 이것은 "마이크로"가 아니므로 비용이 많이 듭니다. "마이크로"를 수동으로 선택하십시오. (마이크로 인스턴스는 첫해에만 무료입니다 ...)

  2. 실행중인 인스턴스의 퍼블릭 DNS 코드를 찾으십시오. 이렇게하려면 대시 보드의 상단 창에서 인스턴스를 클릭하면 하단 창에 "Public DNS"필드가 채워집니다. (조금씩 바이올린이 필요할 수도 있습니다.) 공용 DNS는 다음과 같습니다.
    ec2-174-129-110-23.compute-1.amazonaws.com

  3. 유닉스 콘솔 프로그램을 시작하십시오. (Max OS X에서는 터미널이라고하며 응용 프로그램-> 유틸리티 폴더에 있습니다.)

  4. AWS 키쌍이 포함 된 * .pem 파일이있는 데스크탑 시스템의 디렉토리로 cd하십시오.

  5. 다음과 같은 명령을 사용하여 EC2 인스턴스로 ssh하십시오.
    ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>

    그래서 나에게 이것은 다음과 같습니다.
    ssh -i amzn_ec2_keypair.pem ec2-user@ec2-174-129-110-23.compute-1.amazonaws.com

  6. EC2 인스턴스가 당신을 들여 보내야합니다.

2 단계 : lighttpd를 EC2 인스턴스에 다운로드하십시오.

  1. lighttpd를 설치하려면 EC2 인스턴스에서 루트 액세스 권한이 필요합니다. 문제는 : Amazon은 루트로 로그인 할 수 없다는 것입니다. (적어도 간단하지는 않습니다.) 그러나 해결 방법이 있습니다. 이 명령을 입력하십시오 :
    sudo /bin/bash

  2. 시스템 프롬프트 문자가 $에서 #으로 변경됩니다. 우리는이 전체 과정의 마지막 단계까지 "스도"에서 빠져 나오지 않습니다.

  3. lighttpd 응용 프로그램을 설치하십시오 (버전 1.4.28-1.3.amzn1).
    yum install lighttpd

  4. lighttpd 용 FastCGI 라이브러리를 설치하십시오 (필요하지는 않지만 왜 그렇지 않습니까?).
    yum install lighttpd-fastcgi

  5. 서버가 작동하는지 테스트하십시오.
    /etc/init.d/lighttpd start

3 단계 : 외부 세계가 서버를 보도록합니다.

  1. 이제 데스크탑의 브라우저에서 서버를 누르려고하면 실패합니다. 이유 : 기본적으로 Amazon AWS는 EC2 인스턴스에 대한 포트를 열지 않습니다. 따라서 포트를 수동으로 열어야합니다.

  2. 데스크탑 브라우저에서 EC2 대시 보드로 이동하십시오. 왼쪽 창에서 "보안 그룹"을 클릭하십시오. 오른쪽 상단 창에 하나 이상의 보안 그룹이 나타납니다. 인스턴스를 시작할 때 EC2 인스턴스에 할당 된 인스턴스를 선택하십시오.

  3. "허용 된 연결"이라는 테이블이 오른쪽 아래 창에 나타납니다. 팝업 메뉴에서 연결 방법으로 "HTTP"를 선택할 수 있습니다.

  4. 테이블의 해당 라인에있는 다른 값은 tcp, 80, 80, 0.0.0.0/0이어야합니다.

  5. 이제 브라우저의 데스크탑에서 EC2 인스턴스 서버를 누르십시오. 이전에 SSH에 사용한 공용 DNS 주소를 사용하십시오. lighttpd 일반 웹 페이지가 표시됩니다. 당신이하지 않으면, 나는 그런 멍청한 사람이기 때문에 당신을 도울 수 없습니다. :-(

4 단계 : CGI를 제공하도록 lighttpd를 구성하십시오.

  1. 콘솔 프로그램으로 돌아가서 lighttpd의 구성 디렉토리로 cd하십시오.
    cd /etc/lighttpd

  2. CGI를 활성화하려면 <modules.conf> 파일에서 한 줄의 주석을 해제하십시오. (빠른 CGI를 활성화 할 수는 있지만 베이비 스텝이 가장 좋습니다!) 다음과 같이 "ed"편집기를 사용하여이 작업을 수행 할 수 있습니다.
    ed modules.conf
    /include "conf.d\/cgi.conf"/
    s/#//
    w
    q

  3. CGI 프로그램이 위치 할 디렉토리를 만듭니다. /etc/lighttpd/lighttpd.conf 파일은이 위치를 결정합니다. 기본 위치에 디렉토리를 만들므로 구성 파일을 편집 할 필요가 없습니다.
    cd /var/www/lighttpd
    mkdir cgi-bin
    chmod 755 cgi-bin

  4. 거의 다 왔어! 물론 테스트 CGI 프로그램을 cgi-bin 디렉토리에 넣어야합니다. 여기 하나가 있습니다 :
    cd cgi-bin
    ed
    a
    #!/usr/bin/python
    print "Content-type: text/html\n\n"
    print "<html><body>Hello, pyworld.</body></html>"
    .
    w hellopyworld.py
    q
    chmod 655 hellopyworld.py

  5. lighttpd 서버를 다시 시작하십시오.
    /etc/init.d/lighttpd restart

  6. CGI 프로그램을 테스트하십시오. 데스크톱 브라우저에서이 URL을 클릭하여 EC2 인스턴스의 퍼블릭 DNS 주소를 대체하십시오.
    http://<<Public DNS>>/cgi-bin/hellopyworld.py

    나를 위해, 이것은 :
    http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py

5 단계 : 끝입니다! 청소하고 감사합니다!

  • 앞에서 제공된 "sudo / bin / bash"명령을 종료하려면 다음을 입력하십시오.
    exit

  • 감사의 말 :

    wiki.vpslink.com/Install_and_Configure_lighttpd

    www.cyberciti.biz/tips/lighttpd-howto-setup-cgi-bin-access-for-perl-programs.html

    aws.typepad.com/aws/2010/06/building-three-tier-architectures-with-security-groups.html

  • 행운을 빈다! 나는이 "질문"의 비 전통적인 성격에 대해 사과하지만 Stackoverflow로부터 많은 도움을 받아 무언가를 돌려주기를 간절히 바랐습니다.


4
가이드를 게시 해주셔서 감사하지만 질문을하셨습니다. 블로그 스팟 또는 이와 유사한 것을 추천합니다. 당신이 돌려주고 싶어한다면, 당신은 질문에 대답해야합니다 :)

"방법"에 암시 적 질문, 즉 "X를 어떻게합니까?"가 포함되어 있음을 제출합니다. 앞으로는 처음에는 페트로 트리처럼 보였지만 질문을 명시 적으로 언급 할 것입니다. 그러나 검색 엔진을 지원하고 독자의 혼란을 피할 수 있기 때문에 가치가 있다고 생각합니다. 감사.

신입 회원이 그러한 방법을 게시하는 것은 매우 친절합니다. 어쨌든 아직 묻지 않은 질문에 대답합니다. 그건 그렇고, 그것은 며칠 전에 필요한 정보를 제공합니다. 이제 이런 종류의 서비스가 존재한다는 것을 알고 있습니다. 그건 그렇고, 많은 클라우드를 사용하는 시점 에서이 게시물은 많은 사람들에게 매우 유용 할 것입니다. 그래서 그는 낙담 할 자격이 없으며 나는 찬성합니다.

@ user595585 승인 된 방법은 "어떻게해야합니까?"라는 질문을하고 스스로 대답하는 것입니다. 당신은 그런 식으로 당신의 문제에 대해 더 많은 담당자를 얻습니다. FAQ를 참조하십시오 . "당신이 Jeopardy 인 척하는 한, 질문의 형태로 말로 표현하는 한 자신의 질문을하고 대답하는 것도 좋습니다."
C. Ross

3
@user 편집 귀하의 질문은 그래서 이다 질문, 당신이 제공하는 모든 세부 사항으로 응답합니다. 또한 그 중 일부를 제거하면 리스폰이 아닌 EC2에서 파이썬을 호스팅하는 것에 대해 이야기하고 있습니다.
찢어

답변:


3

(이상한 게시물이므로 답글이 이상하지 않을 것입니다).

보안 결함의 주제 : 웹 서버의 문서 루트 내에 cgi-bin 스크립트를 저장하는 것은 일반적으로 나쁜 습관으로 간주됩니다. W3C조차도 월드 와이드 웹 보안 FAQ 에서 "C와 같은 컴파일 된 언어가 더 안전합니다"라는 문구를 사용하지 않습니다 .

다음 시나리오를 고려하십시오. 편의상 .cgi 확장자를 사용하여 서버에 CGI 스크립트를 식별하기로 결정했습니다. 나중에 해석 된 CGI 스크립트를 약간 변경해야합니다. Emacs 텍스트 편집기로 열어서 스크립트를 수정하십시오. 불행히도 편집은 문서 트리에 스크립트 소스 코드의 백업 복사본을 남겨 둡니다. 원격 사용자는 스크립트 자체를 가져 와서 소스 코드를 얻을 수 없지만 이제 URL을 맹목적으로 요청하여 백업 사본을 얻을 수 있습니다.

    http://your-site/a/path/your_script.cgi~

(이것은 CGI 스크립트를 cgi-bin으로 제한하고 cgi-bin이 문서 루트와 분리되도록하는 또 다른 좋은 이유입니다.)

이것은 문서 루트 내에서 파일을 작성하는 능력만큼 중요한 위협은 아닙니다. 그러나 공격자는 cgi의 소스 코드를 확보하고 이에 대한 직접적인 공격을 고안하여이를 서버의 디딤돌로 사용할 수 있습니다.

이를 완화하기 위해 다음 행을 lighttpd.conf (또는 그 변형)에 추가하여 cgi-bin을 / var / www / lighttpd 문서 루트와 별도의 디렉토리로 지정하십시오.

$HTTP["url"] =~ "/cgi-bin/" { cgi.assign = ( "" => "" ) }
alias.url = ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )

lighttpd에는 cgi 및 alias 모듈이 모두 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.