• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

cgi-Skripte können nicht ausgeführt werden

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
 

Wombat

Gast
Ein wichtiges Detail: Der Fehler, der in der Logfile des Apache Webservers steht, lautet wie folgt:
[Mon Sep 18 10:29:21 2006] [error] [client 192.168.1.3] Options ExecCGI is off in this directory: /Users/Nelly/Sites/blog/mt-check.cgi

Viele Grüsse,
Wombat
 

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.
 

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
 

seb2

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

Nogger

Damasonrenette
Registriert
05.11.05
Beiträge
494
Den hast du zwar aktiviert, aber die ExecCGI Option nicht aufgeführt.
 

seb2

Gast
Hinter die Options. Wie auch oben in der httpd.conf.
 

Kiteman

Jamba
Registriert
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
 

Wombat

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

Danke für Eure Mühe!

Viele Grüsse,
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:
<Directory /Users/*/Sites>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch +ExecCGI
<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>

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