Python CGI на мікро-екземплярі Amazon AWS EC2 - практичне завдання!


23

Як можна змусити мікро екземпляр EC2 обслуговувати CGI-скрипти з lighthttpd? Наприклад, Python CGI?

Ну, це пройшло пів дня, але я отримав cgi Python, який працює на безкоштовній мікроаппаратурі Amazon AWS EC2, використовуючи сервер lighttpd. Я думаю, що це допоможе моїм колегам-нобі, щоб поставити всі кроки на одне місце. Озброївшись простими кроками нижче, для налаштування речей знадобиться лише 15 хвилин!

Моє запитання для більш досвідчених користувачів, які читають це: Чи є якісь вади безпеки в тому, що я робив? (Див. Дозволи на файли та каталоги.)

Крок 1: Запустіть свій екземпляр EC2 і введіть його.

[Очевидно, вам потрібно буде зареєструватися в Amazon EC2 і зберегти свої ключові пари у файлі * .pem. Я не перейду над цим, як Amazon каже вам, як це зробити.]

  1. Увійдіть у свій обліковий запис AWS та запустіть свій екземпляр EC2. В Інтернеті є навчальні посібники щодо цього. Зауважте, що розмір екземплярів за замовчуванням, який Amazon представляє вам, "невеликий" Це не "мікро", і це коштуватиме вам грошей. Не забудьте вручну вибрати "мікро". (Мікро екземпляри безкоштовні лише перший рік ...)

  2. Знайдіть загальнодоступний код DNS для вашого запущеного екземпляра. Для цього натисніть на екземпляр у верхній панелі приладової панелі, і ви зрештою побачите поле "Загальнодоступний DNS", заповнене на нижній панелі. (Можливо, вам доведеться трохи скрипнути.) Загальнодоступний DNS виглядає приблизно так:
    ec2-174-129-110-23.compute-1.amazonaws.com

  3. Запустіть консольну програму Unix. (У Max OS X це називається Terminal, і він знаходиться в папці Applications -> Utilities.)

  4. cd до каталогу вашої робочої системи з файлом * .pem, що містить ваші ключові пари AWS.

  5. ssh до вашого екземпляра EC2 за допомогою команди типу:
    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 не дозволить вам входити як root. (Принаймні не прямо, принаймні.) Але є рішення. Введіть цю команду:
    sudo /bin/bash

  2. Символ підказки системи зміниться з $ в #. Ми не виходимо з "судо" до останнього кроку у всьому цьому процесі.

  3. Встановіть додаток lighttpd (версія 1.4.28-1.3.amzn1):
    yum install lighttpd

  4. Встановіть бібліотеки FastCGI для lighttpd (не потрібно, але чому б і ні?):
    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 з робочого столу вашого браузера. Використовуйте загальнодоступну DNS-адресу, яку ви раніше використовували для SSH. Ви повинні побачити загальну веб-сторінку lighttpd. Якщо ви цього не зробите, я не можу вам допомогти, тому що я такий ноб. :-(

Крок 4: Налаштуйте lighttpd для обслуговування CGI.

  1. Поверніться до консольної програми, cd до каталогу конфігурації для lighttpd:
    cd /etc/lighttpd

  2. Щоб увімкнути CGI, потрібно відмітити один рядок у файлі <module.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-адресу, замінивши загальнодоступну DNS-адресу вашого екземпляра EC2:
    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
Я вітаю вас за те, що ви розмістили путівник, але ТАК - це питання. Я б рекомендував blogspot або щось подібне для цього. Якщо ви хочете повернутись, вам слід відповісти на питання :)

Я стверджую, що будь-яке "як зробити" містить неявне запитання, тобто "Як зробити X?" Надалі я викладу це питання чітко, хоча воно спочатку здавалося педантичним. Але, оскільки це може допомогти пошуковим системам і уникнути плутанини в читацькій аудиторії, я зараз думаю, що це варто. Спасибі.

Новий член дуже люб’язно опублікував таке керівництво. У всякому разі, він відповідає на запитання, які ще не задавались. До речі, це дає мені інформацію, яка мені потрібна була кілька днів тому, зараз я знаю про існування такого роду послуг. До речі, у той час, коли багато говорять про Хмару, ця публікація, ймовірно, буде дуже корисною для багатьох людей. Тож він не заслуговує на те, щоб бути відстороненим, і я виступаю за це.

@ user595585 Затверджена практика - задавати питання "Як мені" і відповісти на нього самостійно. Ви навіть отримаєте більше представників своїх проблем. Будь ласка, дивіться FAQ . "Також прекрасно задавати і відповідати на власне запитання, якщо ви робите вигляд, що перебуваєте під загрозою: формулюйте це у вигляді запитання".
C. Ross

3
@user Редагувати ваше запитання , так що це питання, то відповісти на нього з усіма подробицями ви забезпечили. Крім того, киньте деякі з цих паронів, ви говорите про розміщення python на EC2, а не lisp.
Зірвано

Відповіді:


3

(Дивний пост, тому, сподіваємось, це не буде настільки дивною відповіддю).

Що стосується недоліків безпеки: загальною помилковою практикою є зберігання cgi-bin-скриптів у корені документа веб-сервера. Навіть W3C ухиляється від нього під заголовком "Чи є компільовані мови, такі як C безпечніше ..." у їхньому FAQ щодо всесвітньої безпеки :

Розглянемо наступний сценарій. Для зручності ви вирішили визначити 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/" )

Для цього потрібні як модулі cgi, так і псевдоніми для lighttpd.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.