1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

cgi-Skripte können nicht ausgeführt werden

Dieses Thema im Forum "macOS & OS X" wurde erstellt von Wombat, 18.09.06.

  1. Wombat

    Wombat Gast

    Hallo an alle!

    Ich habe hier ein Problem mit dem Ausführen von cgi-Skripten auf meinem iBook.

    Zur Vorgeschichte:

    Um cgi zu aktivieren habe ich folgendes gemacht:
    Code:
    sudo nano /etc/httpd/httpd.conf
    Anschliessend habe ich bei folgenden Zeilen das Kommentar-Zeichen entfernt:
    Code:
    #LoadModule cgi_module libexec/httpd/mod_cgi.so
    #AddModule mod_cgi.c
    #AddHandler cgi-script .cgi
    
    Desweiteren habe ich folgende Zeile ergänzt:
    Code:
    Options Indexes FollowSymLinks MultiViews
    
    Diese sieht jetzt so aus:
    Code:
    Options Indexes FollowSymLinks MultiViews ExecCGI
    
    Wenn ich aber ein Testskript ausführen will, bekomme ich einen Fehler 403, dass ich nicht über genügend Rechte verfüge, die Datei aufzurufen. Dem Skript habe ich mit chmod 755 ausreichende Rechte gegeben.

    Googlen hat mir nicht wirklich geholfen, obwohl das ein häufig vorkommender Fehler zu sein scheint. Ich habe diese Webseite gefunden, in welcher beschrieben wird, dass es unter /private/etc/httpd ebenfalls eine, für den Benutzer spezifische, conf-Datei befindet, die die ursprüngliche httpd.conf überschreibt. Der Autor gibt an, dass man entweder die Zeile
    Code:
    Include /private/etc/httpd/users/*.conf
    in der httpd.conf auskommentiert, oder aber in der benutzerspezifischen Datei ebenfalls die gewünschten Änderungen vornimmt. Beides habe ich ausprobiert, aber ohne Erfolg. Das Auskommentieren hat keine Veränderung gebracht und die benutzerspezifische Datei enthält exakt die gleichen Änderungen, die ich auch nicht erst anpassen musste, da bereits von vornherein vorhanden. Das scheint es also nicht zu sein.

    Kann mir da irgendjemand weiterhelfen? Ich bin für jeden Hinweis dankbar.

    Zur Vollständigkeit: der Apache Server wurde nach jeder Änderung an der httpd.conf mit
    Code:
    sudo apachectl restart
    neu gestartet. Daran kann es also auch nicht liegen.

    Vielen Dank für Eure Hilfe.

    Viele Grüsse,
    Wombat
     
  2. Wombat

    Wombat Gast

    Ein wichtiges Detail: Der Fehler, der in der Logfile des Apache Webservers steht, lautet wie folgt:
    Viele Grüsse,
    Wombat
     
  3. seb2

    seb2 Gast

    Das ExecCGI hast Du nur für

    <Directory "/Library/WebServer/Documents">

    angemacht? Das müßtest Du für Dein Nutzerverzeichnis auch explizit. Es gibt weiter unten in der Standard-httpd.conf einen auskommentierten Bereich

    #<Directory /Users/*/Sites>

    Den müßtest Du einkommentieren und auch da ExecCGI anmachen. Wenn das auch in Unterverzeichnissen funktionieren soll müßtest Du es auch da explizit anmachen.
     
  4. Wombat

    Wombat Gast

    Danke, das ist sehr nett.

    Ich habe in meiner httpd.conf folgendes gefunden:
    Code:
    #
    # Control access to UserDir directories.  The following is an example
    # for a site where these directories are restricted to read-only.
    #
    <Directory /Users/*/Sites>
        AllowOverride FileInfo AuthConfig Limit
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        <Limit GET POST OPTIONS PROPFIND>
            Order allow,deny
            Allow from all
        </Limit>
        <LimitExcept GET POST OPTIONS PROPFIND>
            Order deny,allow
            Deny from all
        </LimitExcept>
    </Directory>
    
    Dieser ganzer Block war auskommentiert. Ich habe die Kommentarzeichen weggemacht, abgespeichert und den Apache Webserver neu gestartet, aber es geht immer noch nicht.

    Ist das überhaupt der Absatz, den Du meinst?

    Viele Grüsse,
    Wombat
     
  5. seb2

    seb2 Gast

    Das ist der Ansatz. Du mußt natürlich bei den Options ein "ExecCGI" noch hinschreiben.
     
  6. Nogger

    Nogger Damasonrenette

    Dabei seit:
    05.11.05
    Beiträge:
    494
    Den hast du zwar aktiviert, aber die ExecCGI Option nicht aufgeführt.
     
  7. Wombat

    Wombat Gast

    OK, aber in welche Zeile muss das rein?
     
  8. seb2

    seb2 Gast

    Hinter die Options. Wie auch oben in der httpd.conf.
     
  9. Kiteman

    Kiteman Jamba

    Dabei seit:
    05.09.06
    Beiträge:
    55
    Hallo,

    Es gibt ein paar Sachen die man beachten muss zum Aktivieren von einem CGI

    1. script hat die passenden Rechte (chmod 755).
    2. das Dateisuffix .pl, .py, .cgi usw. wird der Handler zugewiesen (AddHandler cgi-script .cgi)
    3. Ordner hat entsprechende Rechte (Options +ExecCGI)

    Mehr hier: http://httpd.apache.org/docs/1.3/howto/cgi.html

    Prinzipiell würde ich zum isolieren der Problematik erstmal mir eine simple Testumgebung machen.

    1. bilde folgende Verzeichnisse
    sudo mkdir Festplatte/Library/Webserver/test
    sudo mkdir Festplatte/Library/Webserver/test/cgi/

    2. Erstelle ein einfaches CGI Skript zum testen.

    #!/usr/bin/perl
    print "Content-type: text/html\r\n\r\n";
    print "Hello, World.";

    3. speichere es als "hello.pl" in das Verzeichnis Festplatte/Library/Webserver/test/cgi/hello.pl

    4. ändere die Rechte von hello.pl mit sudo chmod 755..

    5. Kopiere folgende Direktriven in Dein httpd.conf

    NameVirtualHost 127.0.0.1
    <VirtualHost 127.0.0.1:80>
    ServerName 127.0.0.1
    DocumentRoot /Library/WebServer/test
    <Directory /Library/WebServer/test>
    Options FollowSymLinks IncludesNOEXEC
    DirectoryIndex index.htm index.html index.shtml index.shtm index.php
    </Directory>
    <Directory /Library/WebServer/test/cgi>
    Options +ExecCGI
    AddHandler cgi-script .pl .cgi
    </Directory>
    </VirtualHost>

    6. starte Apache neu -> sudo apachectl graceful

    7. rufe die Testseite auf http://127.0.0.1/cgi/hello.pl

    Wenn es nun funzt, dann kannst Du alles für Deine Problematik ableiten, aber erstmal etwas lauffähig machen. Ich halte es auch wichtig das Du CGI's restrictest auf einen speziellen Ordner, hierbei kann die ScriptAlias Directive nützlich sein bzw. auch die Lösung von Deinem Problem. Am besten Du überfliegt das mal auf den Apacheseiten.

    Viel Erfolg noch.

    Kiteman
     
  10. Wombat

    Wombat Gast

    Vielen Dank Euch allen. Das werde ich jetzt mal in Ruhe ausprobieren.

    Danke für Eure Mühe!

    Viele Grüsse,
    Wombat
     
  11. Wombat

    Wombat Gast

    Ich habe die sehr ausführliche Variante von Kiteman getestet, aber ich bekomme nur den Quelltext angezeigt, nicht das Ergebnis des Skripts. Aber klar, ich habe auch in der vorletzten Zeile das </Directory> entfernt, ob das nun richtig ist wage ich zu bezweifeln. Erstmal bin ich so vorgegangen, wie von Kiteman beschrieben, habe die Ordner angelegt, Rechte vergeben, etc. In der httpd.conf habe ich den vorher von mir geposteten (letzten) Absatz wieder auskommentiert und den von Kiteman eingefügt. Wenn ich aber dann Apache neu starte, dann bekomme ich die Nachricht, das der Befehl zum Neustart ignoriert wird, da in Zeile 453 ein </Directory> nicht erlaubt ist. Wenn man das </Directory> in der vorletzten Zeile löscht, dann startet der Server zwar neu, das Skript funktioniert allerdings nicht.

    Daraufhin habe ich erneut die Zeilen aus meiner httpd.conf entfernt und den alten Block aktiviert. Dieser sieht jetzt so aus:
    Funktioniert leider immer noch nicht. Wo muss denn das ExecCGI nun genau hin? Ist es in dieser Zeile richtig? Gehört das Plus-Zeichen davor?

    Viele Grüsse und vielen Dank für Eure Mühe,
    Wombat
     

Diese Seite empfehlen