Die Common Gateway Interface (CGI) von Apache ermöglicht die dynamische Erstellung von Inhalten mit Programmen bzw. so genannten CGI-Skripts. CGI-Skripts können in jeder beliebigen Programmiersprache geschrieben sein. In der Regel werden aber die Skriptsprachen Perl oder PHP verwendet.
Damit Apache in der Lage ist, die von CGI-Skripts erstellten Inhalte bereitzustellen, muss das Modul mod_cgi aktiviert sein. Außerdem ist mod_alias erforderlich. Beide Module sind standardmäßig aktiviert. Informationen zur Aktivierung von Modulen finden Sie unter Abschnitt 26.4.2, „Aktivieren und Deaktivieren von Modulen“.
CGI-Sicherheit | |
---|---|
Die Zulassung der CGI-Skriptausführung auf dem Server ist ein Sicherheitsrisiko. Weitere Informationen hierzu erhalten Sie unter Abschnitt 26.7, „Vermeiden von Sicherheitsproblemen“. |
In SUSE Linux ist die Ausführung von CGI-Skripts nur im Verzeichnis /srv/www/cgi-bin/
erlaubt. Dieses Verzeichnis ist bereits für die Ausführung von CGI-Skripts konfiguriert. Wenn Sie eine virtuelle Hostkonfiguration erstellt haben (siehe Abschnitt 26.2.1.2, „Virtuelle Hostkonfiguration“) und Ihre CGI-Skripts in einem Host-spezifischen Verzeichnis ablegen möchten, müssen Sie das betreffende Verzeichnis entsperren und für CGI-Skripts konfigurieren.
Beispiel 26.5. CGI-Konfiguration für virtuelle Hosts
ScriptAlias /cgi-bin/ "/srv/www/beispiel.com_cgi-bin/" <Directory "/srv/www/beispiel.com_cgi-bin/"> Options +ExecCGI AddHandler cgi-script .cgi .pl Order allow,deny Allow from all </Directory>
Die CGI-Programmierung unterscheidet sich von der herkömmlichen Programmierung insoweit, als CGI-Programmen und -Skripts ein MIME-Typ-Header wie Content-type: text/html
vorangestellt sein muss. Dieser Header wird an den Client gesendet, damit er weiß, welchen Inhaltstyp er empfängt. Darüber hinaus muss die Skriptausgabe vom Client, in der Regel einem Webbrowser, verstanden werden – dies ist in den meisten Fällen HTML, aber auch Klartext, Bilder oder Ähnliches.
Unter /usr/share/doc/packages/apache2/test-cgi
stellt Apache ein einfaches Testskript bereit. Dieses Skript gibt den Inhalt einiger Umgebungsvariablen als Klartext aus. Wenn Sie dieses Skript ausprobieren möchten, kopieren Sie es in das Verzeichnis /srv/www/cgi-bin/
bzw. in das Skriptverzeichnis Ihres virtuellen Hosts (/srv/www/beispiel.com_cgi-bin/) und benennen Sie es in test.cgi
um.
Über den Webserver zugängliche Dateien sollten dem root
-Benutzer gehören (siehe auch Abschnitt 26.7, „Vermeiden von Sicherheitsproblemen“). Da der Webserver unter einem anderen Benutzer ausgeführt wird, müssen CGI-Skripts von jedermann ausgeführt und gelesen werden können. Wechseln Sie daher in das CGI-Verzeichnis und führen Sie den Befehl chmod 755 test.cgi aus, um die entsprechenden Berechtigungen einzurichten.
Rufen Sie danach http://localhost/cgi-bin/test.cgi
oder http://example.com/cgi-bin/test.cgi
auf. Nun sollte der „CGI/1.0-Testskriptbericht“ angezeigt werden.
Wenn Sie nach der Ausführung des CGI-Testskripts statt des Testskriptberichts eine Fehlermeldung erhalten, überprüfen Sie Folgendes:
CGI-Fehlerbehebung
Haben Sie den Server nach der Konfigurationsänderung neu geladen? Überprüfen Sie dies mit rcapache2 probe.
Falls Sie ein benutzerdefiniertes CGI-Verzeichnis eingerichtet haben, ist dieses richtig konfiguriert? Falls Sie sich nicht sicher sind, führen Sie das Skript im CGI-Standardverzeichnis /srv/www/cgi-bin/
aus. Rufen Sie das Skript dazu mit http://localhost/cgi-bin/test.cgi
auf.
Wurden die richtigen Berechtigungen zugewiesen? Wechseln Sie in das CGI-Verzeichnis und führen Sie ls -l test.cgi aus. Die Befehlsausgabe sollte mit folgender Zeile beginnen:
-rwxr-xr-x 1 root root
Überprüfen Sie das Skript auf Programmierfehler. Wenn Sie die Datei test.cgi nicht bearbeitet haben, dürfte sie keine Programmierfehler enthalten. Falls Sie aber eigene Programme verwenden, sollten Sie diese immer auf Programmierfehler untersuchen.