26.5. Aktivieren von CGI-Skripts

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“.

[Warning]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“.

26.5.1. Konfiguration in Apache

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/"1

<Directory "/srv/www/beispiel.com_cgi-bin/"> 
  Options +ExecCGI2 
  AddHandler cgi-script .cgi .pl3 
  Order allow,deny4 
  Allow from all 
</Directory> 
    
1

Fordert Apache auf, alle Dateien in diesem Verzeichnis als CGI-Skripts zu behandeln

2

Aktiviert die Ausführung von CGI-Skripts

3

Fordert den Server auf, Dateien mit den Erweiterungen .pl und .cgi als CGI-Skripts zu behandeln; passen Sie diese Anweisung entsprechend Ihren Anforderungen an

4

Die Order- und Allow-Direktiven legen den Standardzugriffsstatus sowie die Reihenfolge fest, in der Allow- und Deny-Direktiven ausgewertet werden; in diesem Beispiel werden „deny“-Anweisungen vor „allow“-Anweisungen ausgewertet und der Zugriff ist von jedem Ort aus möglich.

26.5.2. Ausführen eines Beispielskripts

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.

26.5.3. Fehlerbehebung

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.