Python CGI trên vi mô Amazon AWS EC2 - một cách thực hiện!


23

Làm thế nào bạn có thể tạo một cá thể vi EC2 phục vụ các tập lệnh CGI từ lighthttpd? Ví dụ Python CGI?

Chà, mất nửa ngày, nhưng tôi đã nhận được Python cgi chạy trên một cá thể vi mô Amazon AWS EC2 miễn phí, sử dụng máy chủ lighttpd. Tôi nghĩ rằng nó sẽ giúp các đồng nghiệp của tôi đặt tất cả các bước ở một nơi. Được thực hiện với các bước đơn giản dưới đây, bạn sẽ chỉ mất 15 phút để thiết lập mọi thứ!

Câu hỏi của tôi cho những người dùng có nhiều kinh nghiệm hơn khi đọc điều này là: Có bất kỳ lỗi bảo mật nào trong những gì tôi đã làm không? (Xem quyền truy cập tệp và thư mục.)

Bước 1: Bắt đầu EC2 của bạn và ssh vào nó.

[Rõ ràng, bạn sẽ cần đăng ký Amazon EC2 và lưu các cặp khóa của bạn vào tệp * .pem. Tôi sẽ không giải quyết vấn đề này vì Amazon cho bạn biết cách thực hiện.]

  1. Đăng nhập vào tài khoản AWS của bạn và bắt đầu phiên bản EC2 của bạn. Web có hướng dẫn về việc này. Lưu ý rằng kích thước cá thể mặc định mà Amazon trình bày cho bạn là "nhỏ". Đây không phải là "vi mô" và vì vậy nó sẽ khiến bạn mất tiền. Hãy chắc chắn chọn thủ công "vi mô". (Các phiên bản vi mô chỉ miễn phí trong năm đầu tiên ...)

  2. Tìm mã DNS công khai cho ví dụ đang chạy của bạn. Để thực hiện việc này, nhấp vào ví dụ trong khung trên cùng của bảng điều khiển và cuối cùng bạn sẽ thấy trường "DNS công cộng" được điền ở khung bên dưới. (Bạn có thể cần mân mê một chút.) DNS công cộng trông giống như:
    ec2-174-129-110-23.compute-1.amazonaws.com

  3. Bắt đầu chương trình giao diện điều khiển Unix của bạn. (Trên Max OS X, nó được gọi là Terminal và nằm trong thư mục Ứng dụng -> Tiện ích.)

  4. cd vào thư mục trên hệ thống máy tính để bàn có tệp * .pem của bạn chứa khóa bàn phím AWS của bạn.

  5. ssh đến phiên bản EC2 của bạn bằng cách sử dụng một lệnh như:
    ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>

    Vì vậy, đối với tôi, đây là:
    ssh -i amzn_ec2_keypair.pem ec2-user@ec2-174-129-110-23.compute-1.amazonaws.com

  6. Ví dụ EC2 của bạn sẽ cho phép bạn tham gia.

Bước 2: Tải lighttpd về thể hiện EC2 của bạn.

  1. Để cài đặt lighttpd, bạn sẽ cần quyền truy cập root trên thể hiện EC2 của bạn. Vấn đề là: Amazon sẽ không cho phép bạn đăng nhập bằng root. (Không đơn giản, ít nhất.) Nhưng có một cách giải quyết. Gõ lệnh này:
    sudo /bin/bash

  2. Ký tự nhắc hệ thống sẽ thay đổi từ $ thành #. Chúng tôi sẽ không thoát khỏi "sudo" cho đến bước cuối cùng trong toàn bộ quá trình này.

  3. Cài đặt ứng dụng lighttpd (phiên bản 1.4.28-1.3.amzn1 cho tôi):
    yum install lighttpd

  4. Cài đặt thư viện FastCGI cho lighttpd (không cần thiết, nhưng tại sao không?):
    yum install lighttpd-fastcgi

  5. Kiểm tra xem máy chủ của bạn có hoạt động không:
    /etc/init.d/lighttpd start

Bước 3: Hãy để thế giới bên ngoài nhìn thấy máy chủ của bạn.

  1. Nếu bây giờ bạn cố gắng đánh máy chủ của bạn từ trình duyệt trên máy tính để bàn của bạn, nó sẽ thất bại. Lý do: Theo mặc định, Amazon AWS không mở bất kỳ cổng nào tới phiên bản EC2 của bạn. Vì vậy, bạn phải mở các cổng bằng tay.

  2. Chuyển đến bảng điều khiển EC2 của bạn trong trình duyệt trên máy tính để bàn của bạn. Nhấp vào "Nhóm bảo mật" trong khung bên trái. Một hoặc nhiều nhóm bảo mật sẽ xuất hiện trong khung phía trên bên phải. Chọn một cái đã được gán cho thể hiện EC2 của bạn khi bạn khởi chạy thể hiện của mình.

  3. Một bảng có tên "Kết nối được phép" sẽ xuất hiện ở khung bên phải phía dưới. Một menu bật lên sẽ cho phép bạn chọn "HTTP" làm phương thức kết nối.

  4. Các giá trị khác trong dòng đó của bảng phải là: tcp, 80, 80, 0.0.0.0/0

  5. Bây giờ hãy nhấn máy chủ EC2 của bạn từ máy tính để bàn trong trình duyệt của bạn. Sử dụng địa chỉ DNS công cộng mà bạn đã sử dụng trước đó để SSH. Bạn sẽ thấy trang web chung lighttpd. Nếu bạn không, tôi không thể giúp bạn bởi vì tôi là một người mới. :-(

Bước 4: Cấu hình lighttpd để phục vụ CGI.

  1. Quay lại chương trình giao diện điều khiển, cd vào thư mục cấu hình cho lighttpd:
    cd /etc/lighttpd

  2. Để bật CGI, bạn muốn bỏ ghi chú một dòng trong tệp <module.conf>. (Tôi có thể đã bật Fast CGI, nhưng các bước bé là tốt nhất!) Bạn có thể làm điều này với trình chỉnh sửa "ed" như sau:
    ed modules.conf
    /include "conf.d\/cgi.conf"/
    s/#//
    w
    q

  3. Tạo thư mục nơi các chương trình CGI sẽ sống. (Tệp /etc/lighttpd/lighttpd.conf xác định vị trí của nó.) Chúng tôi sẽ tạo thư mục của chúng tôi ở vị trí mặc định, vì vậy chúng tôi không phải thực hiện bất kỳ chỉnh sửa tệp cấu hình nào:
    cd /var/www/lighttpd
    mkdir cgi-bin
    chmod 755 cgi-bin

  4. Sắp đến rồi! Tất nhiên bạn cần đặt một chương trình CGI thử nghiệm vào thư mục cgi-bin. Đây là một:
    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. Khởi động lại máy chủ lighttpd của bạn:
    /etc/init.d/lighttpd restart

  6. Kiểm tra chương trình CGI của bạn. Trong trình duyệt của máy tính để bàn của bạn, nhấn URL này, thay thế địa chỉ DNS công khai của đối tượng EC2 của bạn:
    http://<<Public DNS>>/cgi-bin/hellopyworld.py

    Đối với tôi, đây là:
    http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py

Bước 5: Thế đấy! Dọn dẹp, và cảm ơn!

  • Để thoát khỏi lệnh "sudo / bin / bash" được đưa ra trước đó, gõ:
    exit

  • Lời cảm ơn: Hàng đống lời cảm ơn:

    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

  • Chúc may mắn, amigos! Tôi xin lỗi vì bản chất phi truyền thống của "câu hỏi" này nhưng tôi đã nhận được rất nhiều sự giúp đỡ từ Stackoverflow đến nỗi tôi rất muốn trả lại một cái gì đó.


4
Tôi hoan nghênh bạn đã đăng một hướng dẫn, nhưng SO là để đặt câu hỏi. Tôi muốn giới thiệu blogspot hoặc một cái gì đó tương tự cho việc này. Nếu bạn muốn trả lại, bạn nên trả lời các câu hỏi :)

Tôi gửi rằng bất kỳ "làm thế nào" có chứa một câu hỏi ngầm, tức là "Làm thế nào để tôi làm X?" Trong tương lai tôi sẽ nêu câu hỏi một cách rõ ràng, mặc dù ban đầu nó có vẻ giống như nghề giáo. Nhưng, bởi vì nó có thể hỗ trợ các công cụ tìm kiếm và tránh sự nhầm lẫn trong độc giả, bây giờ tôi nghĩ rằng nó đáng giá. Cảm ơn.

Thật là tốt từ một thành viên mới để đăng một cách như vậy. Dù sao, nó trả lời các câu hỏi chưa được hỏi. Nhân tiện, nó cung cấp cho tôi thông tin tôi cần vài ngày trước, bây giờ tôi biết sự tồn tại của loại dịch vụ này. Nhân tiện, tại thời điểm một người nói nhiều về Đám mây, bài đăng này có thể sẽ rất hữu ích cho nhiều người. Vì vậy, anh ấy không xứng đáng để nản lòng, và tôi nêu lên.

@ user595585 Thực tiễn được phê duyệt là đặt câu hỏi "Làm thế nào để tôi" và tự trả lời nó. Bạn thậm chí có được nhiều đại diện cho rắc rối của bạn theo cách đó. Vui lòng xem FAQ . "Việc hỏi và trả lời câu hỏi của bạn cũng hoàn toàn ổn, miễn là bạn giả vờ như bạn đang gặp nguy hiểm: diễn đạt nó dưới dạng câu hỏi."
C. Ross

3
@user Chỉnh sửa câu hỏi của bạn để nó một câu hỏi, sau đó trả lời nó với tất cả các chi tiết bạn cung cấp. Ngoài ra, bỏ một số parens đó, bạn đang nói về việc lưu trữ python trên EC2, không phải là không thể.
Ripped Off

Câu trả lời:


3

(Bài viết kỳ lạ, vì vậy hy vọng đây sẽ không phải là một câu trả lời lạ lùng).

Về vấn đề lỗi bảo mật: việc lưu trữ các tập lệnh cgi-bin trong thư mục gốc của máy chủ web được coi là thông lệ xấu. Ngay cả W3C cũng nói về điều đó trong phần "Các ngôn ngữ được biên dịch như C an toàn hơn ..." trong Câu hỏi thường gặp về World Wide Web Security của họ :

Hãy xem xét các kịch bản sau đây. Để thuận tiện, bạn đã quyết định xác định các tập lệnh CGI cho máy chủ bằng cách sử dụng phần mở rộng .cgi. Sau đó, bạn cần thực hiện một thay đổi nhỏ đối với tập lệnh CGI được diễn giải. Bạn mở nó lên bằng trình soạn thảo văn bản Emacs và sửa đổi tập lệnh. Thật không may, bản chỉnh sửa để lại một bản sao dự phòng của mã nguồn tập lệnh nằm xung quanh trong cây tài liệu. Mặc dù người dùng từ xa không thể có được mã nguồn bằng cách tìm nạp chính tập lệnh, giờ đây anh ta có thể có được bản sao lưu bằng cách yêu cầu URL một cách mù quáng:

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

(Đây là một lý do chính đáng khác để giới hạn các tập lệnh CGI ở cgi-bin và để đảm bảo rằng cgi-bin tách biệt với gốc tài liệu.)

Đây không phải là một mối đe dọa đáng kể như khả năng viết một tệp trong thư mục gốc. Tuy nhiên, kẻ tấn công có thể lấy mã nguồn của cgi, nghĩ ra một cuộc tấn công có hướng chống lại nó và sử dụng nó như một bước đệm vào máy chủ.

Để giảm thiểu điều này, bạn có thể thêm các dòng sau vào lighttpd.conf (hoặc một số biến thể trong đó) để chuyển cgi-bin vào một thư mục tách biệt với thư mục gốc của tài liệu / var / www / lighttpd.

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

Điều này đòi hỏi cả hai mô-đun cgi và bí danh cho lighttpd.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.