Wie kann man eine EC2-Mikroinstanz dazu bringen, CGI-Skripte von lighthttpd aus zu bedienen? Zum Beispiel Python CGI?
Nun, es hat einen halben Tag gedauert, aber ich habe Python cgi auf einer kostenlosen Amazon AWS EC2-Mikroinstanz mit dem lighttpd-Server zum Laufen gebracht. Ich denke, es wird meinen Noobs helfen, alle Schritte an einem Ort zu platzieren. Mit den folgenden einfachen Schritten können Sie die Dinge in nur 15 Minuten einrichten!
Meine Frage an die erfahreneren Benutzer, die dies lesen, lautet: Gibt es Sicherheitslücken in dem, was ich getan habe? (Siehe Datei- und Verzeichnisberechtigungen.)
Schritt 1: Starten Sie Ihre EC2-Instanz und ssh hinein.
[Natürlich müssen Sie sich bei Amazon EC2 anmelden und Ihre Schlüsselpaare in einer * .pem-Datei speichern. Ich werde nicht darauf eingehen, da Amazon Ihnen sagt, wie es geht.]
Melden Sie sich in Ihrem AWS-Konto an und starten Sie Ihre EC2-Instanz. Das Web bietet dazu Tutorials. Beachten Sie, dass die Standardinstanzgröße, die Amazon für Sie bereitstellt, "klein" ist. Dies ist kein "Mikro" und kostet Sie Geld. Stellen Sie sicher, dass Sie "micro" manuell auswählen. (Micro-Instanzen sind nur für das erste Jahr kostenlos ...)
Suchen Sie den öffentlichen DNS-Code für Ihre laufende Instanz. Klicken Sie dazu im oberen Bereich des Dashboards auf die Instanz. Schließlich wird im unteren Bereich das Feld "Öffentliches DNS" angezeigt. (Möglicherweise müssen Sie ein wenig fummeln.) Das öffentliche DNS sieht ungefähr so aus:
ec2-174-129-110-23.compute-1.amazonaws.com
Starten Sie Ihr Unix-Konsolenprogramm. (Unter Max OS X heißt es Terminal und befindet sich im Ordner Applications -> Utilities.)
Wechseln Sie in das Verzeichnis auf Ihrem Desktop-System, in dem sich Ihre * .pem-Datei befindet, die Ihre AWS-Schlüsselpaare enthält.
ssh zu Ihrer EC2-Instanz mit einem Befehl wie:
ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>
Für mich war das also:
ssh -i amzn_ec2_keypair.pem [email protected]
Ihre EC2-Instanz sollte Sie einlassen.
Schritt 2: Laden Sie lighttpd auf Ihre EC2-Instanz herunter.
Um lighttpd zu installieren, benötigen Sie Root-Zugriff auf Ihrer EC2-Instanz. Das Problem ist: Bei Amazon können Sie sich nicht als root anmelden. (Zumindest nicht direkt.) Es gibt jedoch eine Problemumgehung. Geben Sie diesen Befehl ein:
sudo /bin/bash
Das System-Eingabeaufforderungszeichen ändert sich von $ in #. Wir werden "sudo" bis zum allerletzten Schritt in diesem gesamten Prozess nicht verlassen.
Installieren Sie die lighttpd-Anwendung (Version 1.4.28-1.3.amzn1 für mich):
yum install lighttpd
Installieren Sie die FastCGI-Bibliotheken für lighttpd (nicht erforderlich, aber warum nicht?):
yum install lighttpd-fastcgi
Testen Sie, ob Ihr Server funktioniert:
/etc/init.d/lighttpd start
Schritt 3: Lassen Sie die Außenwelt Ihren Server sehen.
Wenn Sie jetzt versuchen, Ihren Server über den Browser auf Ihrem Desktop zu erreichen, schlägt dies fehl. Der Grund: Standardmäßig öffnet Amazon AWS keine Ports für Ihre EC2-Instanz. Sie müssen die Ports also manuell öffnen.
Rufen Sie im Browser Ihres Desktops Ihr EC2-Dashboard auf. Klicken Sie im linken Bereich auf "Sicherheitsgruppen". Eine oder mehrere Sicherheitsgruppen werden im oberen rechten Bereich angezeigt. Wählen Sie die aus, die Ihrer EC2-Instanz beim Starten Ihrer Instanz zugewiesen wurde.
Eine Tabelle mit dem Namen "Zugelassene Verbindungen" wird im unteren rechten Bereich angezeigt. In einem Popup-Menü können Sie "HTTP" als Verbindungsmethode auswählen.
Die anderen Werte in dieser Zeile der Tabelle sollten sein: tcp, 80, 80, 0.0.0.0/0
Schlagen Sie jetzt den Server Ihrer EC2-Instanz vom Desktop in Ihrem Browser aus an. Verwenden Sie die öffentliche DNS-Adresse, die Sie zuvor für SSH verwendet haben. Die allgemeine Webseite lighttpd sollte angezeigt werden. Wenn Sie nicht, kann ich Ihnen nicht helfen, weil ich so ein Noob bin. :-(
Schritt 4: Konfigurieren Sie lighttpd für CGI.
Zurück im Konsolenprogramm, wechseln Sie in das Konfigurationsverzeichnis für lighttpd:
cd /etc/lighttpd
Um CGI zu aktivieren, müssen Sie eine Zeile in der Datei <modules.conf> auskommentieren. (Ich hätte Fast CGI aktivieren können, aber Babyschritte sind am besten!) Sie können dies mit dem Editor "ed" wie folgt tun:
ed modules.conf
/include "conf.d\/cgi.conf"/
s/#//
w
q
Erstellen Sie das Verzeichnis, in dem CGI-Programme gespeichert werden. (Die Datei /etc/lighttpd/lighttpd.conf legt fest, wo sich diese befindet.) Wir erstellen unser Verzeichnis am Standardspeicherort, sodass wir keine Konfigurationsdateien bearbeiten müssen:
cd /var/www/lighttpd
mkdir cgi-bin
chmod 755 cgi-bin
Fast dort! Natürlich müssen Sie ein Test-CGI-Programm in das cgi-bin-Verzeichnis stellen. Hier ist eine:
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
Starten Sie Ihren lighttpd-Server neu:
/etc/init.d/lighttpd restart
Testen Sie Ihr CGI-Programm. Klicken Sie im Browser Ihres Desktops auf diese URL und ersetzen Sie die öffentliche DNS-Adresse Ihrer EC2-Instanz:
http://<<Public DNS>>/cgi-bin/hellopyworld.py
Für mich war das:
http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py
Schritt 5: Das war's! Räumen Sie auf und danken Sie!
Geben Sie Folgendes ein, um den zuvor angegebenen Befehl "sudo / bin / bash" zu beenden:
exit
Danksagung: Vielen Dank an:
wiki.vpslink.com/Install_and_Configure_lighttpd
www.cyberciti.biz/tips/lighttpd-how-setup-cgi-bin-access-for-perl-programs.html
aws.typepad.com/aws/2010/06/building-three-tier-architectures-with-security-groups.html
Viel Glück, Freunde! Ich entschuldige mich für die unkonventionelle Natur dieser "Frage", aber ich habe so viel Hilfe von Stackoverflow bekommen, dass ich unbedingt etwas zurückgeben wollte.
quelle
Antworten:
(Seltsamer Beitrag, hoffentlich ist dies keine so seltsame Antwort).
Zum Thema Sicherheitslücken: Das Speichern von CGI-BIN-Skripten im Dokumentstamm des Webservers wird als allgemeine schlechte Praxis angesehen. Sogar das W3C geht in den FAQ zu World Wide Web Security unter "Sind kompilierte Sprachen wie C sicherer ..." darauf ein :
Dies ist keine so große Bedrohung wie das Schreiben einer Datei im Dokumentstamm. Ein Angreifer könnte jedoch den Quellcode des CGI erhalten, einen gezielten Angriff darauf planen und ihn als Sprungbrett in den Server verwenden.
Um dies zu vermeiden, können Sie der Datei lighttpd.conf (oder einer Variation davon) die folgenden Zeilen hinzufügen, um cgi-bin in ein Verzeichnis zu verschieben, das vom Stammverzeichnis / var / www / lighttpd getrennt ist.
Dies erfordert sowohl das cgi-Modul als auch das Alias-Modul für lighttpd.
quelle