PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache - index.cgi von jedem Verzeichnis aus laufen lassen?



sutterp
20.05.03, 11:18
Guten Tag,

Ich möchte dass Apache die index.cgi in irgendeinem Verzeichnis (innerhalb der Apache Struktur) ausführt, nicht nur von cgi-bin aus. Die Datei index.cgi ist ein Perl Skript. Um dies zu erreichen, habe ich folgende Einträge in meiner httpd.conf:

DocumentRoot "/www"

<Directory />
AuthUserFile /etc/httpd/passwd
AuthGroupFile /etc/httpd/group
AddHandler cgi-script .cgi
Options All Indexes FollowSymLinks +Multiviews EXECcgi
AllowOverride All
</Directory>

<Directory "/www">
Options Indexes FollowSymLinks +Includes MultiViews EXECcgi
AddHandler cgi-script .cgi
AllowOverride all
Order allow,deny
Allow from all
</Directory>

DirectoryIndex index.html index.cgi

So innerhalb der Apache Struktur, von / an abwärts, sollten eigentlich EXECcgi und AddHandler cgi-script gültig sein. Jedoch wenn ich versuche index.cgi anzusprechen, bekomme ich im Fehlerlog folgenden Eintrag:

[Tue May 20 14:09:13 2003] [error] (13)Permission denied: exec of /www/index.cgi failed
[Tue May 20 14:09:13 2003] [error] [client 192.168.1.189] Premature end of script headers: /www/index.cgi

/www/index.cgi hat 755 als privilegien.

Was übersehe ich? Hab ich irgendwas zu spezifizieren welches die Interpretierung von index.cgi als Perl Skript zulässt, mit Ausnahme von #!/bin/perl in der ersten Zeile des Skriptes?

Der Perl Skript selbst ist in Ordnung, da dieser korrekt abläuft wenn ich ihn ins cgi-bin Verzeichnis kopiere.

Ein su nach wwwrun erlaubt mir den Skript mit perl -T /www/index.cgi fehlerfrei auszuführen, also scheinen die Protektion Codes den ganzen Pfad entlang richtig zu sein. Wenn ich den Skript als wwwrun ausführen kann, warum kann Apache das dann nicht? Ich nehme deshalb an, dass irgend etwas im httpd.conf fehlt.

Wo klemmts?

Vielen Dank für jegliche Tips.

Peter Sutter

xstevex22
20.05.03, 11:22
Hi!
Wenn du alle Ordner als ExecCGI markierst, kannst du keine "normalen" HTML Dateien mehr ausführen. Die Versuch er dann meines Wissens nach auch als CGI auszuführen.

sutterp
20.05.03, 11:27
Da bin ich mir nicht so sicher. Mit den erähnten Einstellungen laufen alle .html Dateien noch richtig, aber keine cgi Dateien, gleich wie sie heissen; es sei denn sie sind in cgi-bin.

DerKlopfer2000
20.05.03, 12:07
Es ist schon etwas längere Zeit her, wo ich mich mit Apache beschäftigt habe, aber ich habe da irgendwie in Erinnerung, das man das mit "ScriptAlias" hinbekommt, also z.B. ScriptAlias /cgi-bin/ /www/

Aber frage mich jetzt nicht, wo Du das eintragen musst. Das ganze war bei mir Apache 1.2. Ist schon etwas länger her.

xstevex22
20.05.03, 12:09
Hi!
Das mit dem ScriptAlias kommt vor die <Directory> Direktive.

Krischan
20.05.03, 13:34
Hallo Peter,

Du hast zwar mit AddHandler einen Handler gesetzt, musst aber jetzt noch mit
SetHandler cgi-script
den Handler dem Verzeichnis zuweisen.

Außerdem sollte in der Options Direktive ExecCGI in der korrekten Schreibweise geschrieben werden. Ich bin mir jetzt zwar nicht 100% sicher, ob das wichtig ist, steht aber in der Dokumentation so.

Sonst sehe ich nichts falsches. Sollte so klappen.

Gruß,
Christian

sutterp
21.05.03, 06:04
Dank an alle die geantwortet haben.

Das Problem hat sich erledigt, es war ein ganz dummer Fehler der da passiert ist. Falls jemand in Zukunft ein ähnliches Problem hat, hier nochmals eine Zusammenfassung.

1. Die Perl Scripts laufen interaktiv richtig.
2. Die Konfiguration von Apache ist auch richtig.
3. Die Berechtigungen in allen Pfaden für alle Verzeichnisse und Dateien ist auch richtig.
4. Trotzdem, wenn der Skript ausgeführt wird, fällt er mit dem folgenden Eintrag im Fehler log auf die Nase:
[Tue May 20 14:09:13 2003] [error] (13)Permission denied: exec of /www/index.cgi failed
[Tue May 20 14:09:13 2003] [error] [client 192.168.1.189] Premature end of script headers: /www/index.cgi
5. Ein strace /www/index.cgi zeigt folgendes:
basilisk:/www # strace /www/index.cgi
execve("/www/index.cgi", ["/www/index.cgi"], [/* 52 vars */]) = 0
strace: exec: Permission denied
6. Das /www Verzeichnis ist ein Symlink auf einen gemounteten NFS Share.

Lösung:
Sicher machen dass der NFS Share mit exec gemounted wird!!!

Noch ein Kommentar zu Euren Antworten:

Die Gross/Kleinschreibung spielt keine Rolle, Apache scheint da sehr tolerant zu sein.

Auch SetHandler cgi-bin ist nicht nötig, klappt bei mir auch ohne.

Die html Dateien werden nach wie vor richtig durchgeführt, auch wenn das Verzeichnis ExecCGI und AddHandler beihaltet. Apache scheint clever genug zu sein html und cgi auseinanderzuhalten.

Wenn ScriptAlias vor der <Directory> Direktiven steht, gilt es für alle Verzeichnisse, sonst nur für das wo es deklariert wurde.

Vielen Dank

Peter

Krischan
21.05.03, 08:38
Sorry,

SetHandler cgi-bin war auch verkehrt beschrieben.
Die Direktive bewirkt, dass allen Dateien im Container der Handler cgi-bin zugewiesen wird und nicht nur den Dateien mit der Endung .cgi, wie bei der Direktive AddHandler cgi-bin .cgi

Gruß,
Christian