Jak sprawić, by mikro instancja EC2 obsługiwała skrypty CGI z lighthttpd? Na przykład Python CGI?
Cóż, zajęło to pół dnia, ale udało mi się uruchomić Python cgi na darmowej mikro-instancji Amazon AWS EC2, używając serwera lighttpd. Myślę, że to pomoże moim kolegom noobom umieścić wszystkie kroki w jednym miejscu. Uzbrojeni w poniższe proste czynności, skonfigurowanie zajmie Ci tylko 15 minut!
Moje pytanie dla bardziej doświadczonych użytkowników, którzy to czytają, brzmi: Czy są jakieś błędy w zabezpieczeniach w tym, co zrobiłem? (Zobacz uprawnienia do plików i katalogów.)
Krok 1: Uruchom instancję EC2 i włącz do niej ssh.
[Oczywiście, musisz zarejestrować się w Amazon EC2 i zapisać swoje pary kluczy w pliku * .pem. Nie omówię tego, ponieważ Amazon mówi ci, jak to zrobić.]
Zaloguj się do swojego konta AWS i uruchom instancję EC2. W sieci dostępne są samouczki na ten temat. Zauważ, że domyślny rozmiar instancji, który przedstawia ci Amazon, jest „mały”. To nie jest „mikro” i dlatego będzie cię kosztować. Pamiętaj, aby ręcznie wybrać „mikro”. (Mikro instancje są bezpłatne tylko przez pierwszy rok ...)
Znajdź publiczny kod DNS dla uruchomionej instancji. Aby to zrobić, kliknij instancję w górnym okienku pulpitu nawigacyjnego, a ostatecznie zobaczysz pole „Publiczny DNS” wypełnione w dolnym okienku. (Być może trzeba będzie trochę pogrzebać.) Publiczny DNS wygląda mniej więcej tak:
ec2-174-129-110-23.compute-1.amazonaws.com
Uruchom program konsoli Unix. (W systemie Max OS X nazywa się Terminal i mieszka w folderze Aplikacje -> Narzędzia).
cd do katalogu na twoim komputerze stacjonarnym, który zawiera plik * .pem zawierający twoje klucze AWS.
ssh do instancji EC2 za pomocą polecenia takiego jak:
ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>
Dla mnie było to:
ssh -i amzn_ec2_keypair.pem [email protected]
Twoja instancja EC2 powinna cię wpuścić.
Krok 2: Pobierz lighttpd na instancję EC2.
Aby zainstalować lighttpd, będziesz potrzebować dostępu do roota w swoim wystąpieniu EC2. Problem polega na tym, że Amazon nie pozwoli ci zalogować się jako root. (Przynajmniej nie wprost). Istnieje jednak obejście. Wpisz to polecenie:
sudo /bin/bash
Systemowy znak zachęty zmieni się z $ na #. Nie wyjdziemy z „sudo” aż do ostatniego kroku w tym procesie.
Zainstaluj aplikację lighttpd (dla mnie wersja 1.4.28-1.3.amzn1):
yum install lighttpd
Zainstaluj biblioteki FastCGI dla lighttpd (nie potrzebne, ale dlaczego nie?):
yum install lighttpd-fastcgi
Sprawdź, czy serwer działa:
/etc/init.d/lighttpd start
Krok 3: Niech świat zewnętrzny zobaczy twój serwer.
Jeśli teraz spróbujesz trafić serwer z przeglądarki na pulpicie, zakończy się niepowodzeniem. Powód: domyślnie Amazon AWS nie otwiera żadnych portów dla instancji EC2. Musisz więc ręcznie otworzyć porty.
Przejdź do pulpitu nawigacyjnego EC2 w przeglądarce pulpitu. Kliknij „Grupy bezpieczeństwa” w lewym okienku. Jedna lub więcej grup zabezpieczeń pojawi się w prawym górnym panelu. Wybierz ten, który został przypisany do instancji EC2 podczas uruchamiania instancji.
Tabela o nazwie „Dozwolone połączenia” pojawi się w prawym dolnym panelu. Wyskakujące menu pozwoli ci wybrać „HTTP” jako metodę połączenia.
Pozostałe wartości w tym wierszu tabeli powinny wynosić: tcp, 80, 80, 0.0.0.0/0
Teraz naciśnij serwer instancji EC2 z pulpitu w przeglądarce. Użyj publicznego adresu DNS, którego użyłeś wcześniej do SSH. Powinieneś zobaczyć ogólną stronę lighttpd. Jeśli nie, nie mogę ci pomóc, bo jestem takim noobem. :-(
Krok 4: Skonfiguruj lighttpd do obsługi CGI.
Z powrotem w programie konsoli, przejdź do katalogu konfiguracji lighttpd:
cd /etc/lighttpd
Aby włączyć CGI, chcesz usunąć komentarz z jednej linii w pliku <modules.conf>. (Mogłem włączyć szybki CGI, ale kroki dziecka są najlepsze!) Możesz to zrobić za pomocą edytora „ed” w następujący sposób:
ed modules.conf
/include "conf.d\/cgi.conf"/
s/#//
w
q
Utwórz katalog, w którym będą żyć programy CGI. (Plik /etc/lighttpd/lighttpd.conf określa, gdzie to będzie.) Stworzymy nasz katalog w domyślnej lokalizacji, więc nie będziemy musieli edytować plików konfiguracyjnych:
cd /var/www/lighttpd
mkdir cgi-bin
chmod 755 cgi-bin
Prawie na miejscu! Oczywiście musisz umieścić testowy program CGI w katalogu cgi-bin. Tutaj jest jeden:
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
Uruchom ponownie serwer lighttpd:
/etc/init.d/lighttpd restart
Przetestuj swój program CGI. W przeglądarce pulpitu naciśnij ten adres URL, zastępując publiczny adres DNS instancji EC2:
http://<<Public DNS>>/cgi-bin/hellopyworld.py
Dla mnie było to:
http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py
Krok 5: To wszystko! Posprzątaj i podziękuj!
Aby wyjść z podanego wcześniej polecenia „sudo / bin / bash”, wpisz:
exit
Podziękowania: Mnóstwo podziękowań dla:
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-w--security-groups.html
Powodzenia, amigos! Przepraszam za nietradycyjny charakter tego „pytania”, ale otrzymałem tak wiele pomocy od Stackoverflow, że chętnie coś oddałem.
źródło
Odpowiedzi:
(Dziwny post, więc mam nadzieję, że nie będzie to tak dziwna odpowiedź).
Jeśli chodzi o wady bezpieczeństwa: za ogólną złą praktykę uważa się przechowywanie skryptów cgi-bin w katalogu głównym serwera WWW. Nawet W3C wymyka się temu pod hasłem „Czy języki kompilowane, takie jak C, są bezpieczniejsze ...” w często zadawanych pytaniach dotyczących bezpieczeństwa w sieci WWW :
Nie jest to tak duże zagrożenie, jak możliwość zapisu pliku w katalogu głównym dokumentu. Jednak osoba atakująca może uzyskać kod źródłowy cgi, wymyślić ukierunkowany atak przeciwko niemu i wykorzystać go jako odskocznię do serwera.
Aby temu zaradzić, możesz dodać następujące wiersze do pliku lighttpd.conf (lub jego odmian), aby skierować cgi-bin do katalogu innego niż katalog główny katalogu / var / www / lighttpd.
Wymaga to zarówno modułów cgi, jak i modułów aliasów dla lighttpd.
źródło