Как сделать так, чтобы микро-экземпляр EC2 обслуживал сценарии CGI из lighthttpd? Например Python CGI?
Ну, это заняло полдня, но я запустил Python cgi на бесплатном микро-экземпляре Amazon AWS EC2, используя сервер lighttpd. Думаю, моим товарищам-новичкам это поможет собрать все шаги в одном месте. Вооружившись простыми шагами, описанными ниже, вы сможете настроить все за 15 минут!
Мой вопрос для более опытных пользователей, читающих это: есть ли недостатки безопасности в том, что я сделал? (См. Разрешения для файлов и каталогов.)
[Очевидно, вам необходимо зарегистрироваться в Amazon EC2 и сохранить пары ключей в файле * .pem. Я не буду вдаваться в подробности, поскольку Amazon расскажет, как это сделать.]
Войдите в свою учетную запись AWS и запустите свой экземпляр EC2. В Интернете есть инструкции по этому поводу. Обратите внимание, что размер инстанса по умолчанию, который предлагает вам Amazon, «маленький». Это не «микро», и это будет стоить вам денег. Не забудьте вручную выбрать «микро». (Микроинстансы бесплатны только в течение первого года ...)
Найдите общедоступный код DNS для вашего запущенного экземпляра. Для этого щелкните экземпляр в верхней панели панели инструментов, и в конечном итоге вы увидите поле «Public DNS», заполненное на нижней панели. (Возможно, вам придется немного повозиться.) Общедоступный DNS выглядит примерно так:
ec2-174-129-110-23.compute-1.amazonaws.com
Запустите консольную программу Unix. (В Max OS X он называется Terminal и находится в папке Applications -> Utilities.)
cd в каталог на настольной системе, в котором находится файл * .pem, содержащий ваши пары ключей AWS.
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
Ваш экземпляр EC2 должен вас впустить.
Чтобы установить lighttpd, вам понадобится root-доступ к вашему экземпляру EC2. Проблема в том, что Amazon не позволит вам войти в систему как root. (По крайней мере, не сразу.) Но есть обходной путь. Введите эту команду:
sudo /bin/bash
Системный символ приглашения изменится с $ на #. Мы не выйдем из sudo до самого последнего шага в этом процессе.
Установите приложение lighttpd (у меня версия 1.4.28-1.3.amzn1):
yum install lighttpd
Установите библиотеки FastCGI для lighttpd (не нужны, а почему бы и нет?):
yum install lighttpd-fastcgi
Убедитесь, что ваш сервер работает:
/etc/init.d/lighttpd start
Если теперь вы попытаетесь подключиться к своему серверу из браузера на рабочем столе, это не удастся. Причина: по умолчанию Amazon AWS не открывает никаких портов для вашего инстанса EC2. Итак, вам придется открывать порты вручную.
Перейдите на панель управления EC2 в браузере рабочего стола. Щелкните «Группы безопасности» на левой панели. Одна или несколько групп безопасности появятся на верхней правой панели. Выберите тот, который был назначен вашему инстансу EC2 при запуске инстанса.
Таблица под названием «Разрешенные соединения» появится в правом нижнем углу. Всплывающее меню позволит вам выбрать «HTTP» в качестве метода подключения.
Остальные значения в этой строке таблицы должны быть: tcp, 80, 80, 0.0.0.0/0
Теперь перейдите на сервер вашего экземпляра EC2 с рабочего стола в браузере. Используйте публичный DNS-адрес, который вы использовали ранее для SSH. Вы должны увидеть общую веб-страницу lighttpd. Если вы этого не сделаете, я не смогу вам помочь, потому что я такой новичок. :-(
Вернувшись в консольную программу, перейдите в каталог конфигурации для lighttpd:
cd /etc/lighttpd
Чтобы включить CGI, вы хотите раскомментировать одну строку в файле <modules.conf>. (Я мог бы включить Fast CGI, но лучше всего подходят маленькие шаги!) Вы можете сделать это с помощью редактора "ed" следующим образом:
ed modules.conf
/include "conf.d\/cgi.conf"/
s/#//
w
q
Создайте каталог, в котором будут жить программы CGI. (Файл /etc/lighttpd/lighttpd.conf определяет, где это будет.) Мы создадим наш каталог в местоположении по умолчанию, поэтому нам не нужно редактировать файлы конфигурации:
cd /var/www/lighttpd
mkdir cgi-bin
chmod 755 cgi-bin
Почти готово! Конечно, вам нужно поместить тестовую программу 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
Перезагрузите ваш сервер lighttpd:
/etc/init.d/lighttpd restart
Протестируйте свою программу 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
Чтобы выйти из команды 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, что я очень хотел что-то ответить.
(Странный пост, надеюсь, ответ будет не таким странным).
Что касается недостатков безопасности: считается плохой практикой хранить скрипты cgi-bin в корневом каталоге документов веб-сервера. Даже W3C уклоняется от этого в разделе «Скомпилированные языки, такие как 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/" )
Для этого требуются модули cgi и alias для lighttpd.