Christoph Schnauß: Verständnisproblem bei Scriptablage

hallo Forum,

inzwischen dürfte bekannt sein (Andreas Laugks hat es ja mehrfach ausposaunt), daß ich mir meine Partitionen auf der Kaffeemaschine einrichte. Und dann mit dem Temperaturregler auch das grade gültige Betriebssystem auswähle ;-)

Nun habe ich aber ein Problem mit ein paar CGI-Scripts (Perl, bash, bat ...). Sie liegen auf einer FAT32-Partition, weil ich gehofft habe, ich könnte dann unabhängig vom Betriebssystem meinen Apache darauf zugreifen lassen. Das geht aber leider nicht so, wie ich mir das vorgestellt habe.
Obwohl ich die Partition natürlich mounten kann und mir die Rechte korrekt angezeigt werden (rwxr-xr-x), hat mein Apache sich standhaft geweigert und irgendwas von "permission denied" gejammert. Erst als ich meine Scripts nach ~/cgi-bin kopiert und den neuen Pfad an den Apache verfüttert habe, wollte er sie auch ausführen lassen und fand nix mehr zu meckern.

PHP-Scripts werden hingegen anstandslos ausgeführt, auch wenn sie auf einer FAT32-Partition liegen. Und nun verstehe ich nicht ganz, warum meine CGI-Basteleien da nicht mitmachen, nicht einmal ein ganz simples Scriptchen, das nur ein paar Umgebungsvariablen abfragen soll. Im Augenblick ist die entsprechende Partition in der /etc/fstab folgendermaßen eingebunden:
  /dev/hda9 /_net vfat rw,noatime,async,noexec,umask=0002 0 0
Bei den options habe ich natürlich für "umask" auch andere Werte probiert und "noexec" auch schon weggelassen. Das Ergebnis ist immer dasselbe: "permission denied".

Mir fehlt das Verständnis dafür. Die Lösung besteht zwar darin, die Scripts an einen anderen Ort zu kopieren, aber mich interessiert es, warum auf dieser /dev/hda9 zwar ausführbare PHP-, aber keine ausführbaren CGI-Scripts liegen können.

Grüße aus Berlin

Christoph S.

  1. Hi,

    Mir fehlt das Verständnis dafür. Die Lösung besteht zwar darin, die Scripts an einen anderen Ort zu kopieren, aber mich interessiert es, warum auf dieser /dev/hda9 zwar ausführbare PHP-, aber keine ausführbaren CGI-Scripts liegen können.

    Perl-scripte werden normalerweise vom Apache nur ausgeführt, wenn sie in einem per scriptalias (oder aber options +ExecCGI oder so ähnlich) freigegebenem Verzeichnis liegen.
    Üblicherweise ist nur /cgi-bin per Scriptalias freigegeben und nichts per options +ExecCGI.

    Für PHP-Scripte gibt es normalerweise diese Einschränkung nicht.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. hallo Andreas,

      Perl-scripte werden normalerweise vom Apache nur ausgeführt

      Nö. Sie werden an den Perl-Interpreter übergeben, der führt sie aus und reicht sein Arbeitsergebnis an den Apache zurück.

      wenn sie in einem per scriptalias (oder aber options +ExecCGI oder so ähnlich) freigegebenem Verzeichnis liegen.

      Das ist mir bekannt und ist natürlich berücksichtigt worden.

      Üblicherweise ist nur /cgi-bin per Scriptalias freigegeben und nichts per options +ExecCGI.

      Richtig  -  aber ich muß natürlich noch festlegen, wo /cgi-bin zu liegen hat. Ist es meine FAT32-Partition, klappt es nicht. Ist es irgendwas andres wie beispielsweise ~/cgi-bin oder auch /var/www/cgi-bin, klappt es.

      Grüße aus Berlin

      Christoph S.

  2. Hi Christoph,

    2 Möglichkeiten zur CGI Schnittstelle im Apache:

    1:   AddHandler cgi-script .cgi .pl

    2:   ScriptAlias /cgi-bin/ d:/home/rolfrost/htdocs/cgi-bin/

    Zu 1: Scripts werden in jedem Verzeichnis ausgeführt
    Zu 2: Scripts 'gehen' nur in /cgi-bin/ (Alias)

    Ohne Geweahr.

    Gruss, Rolf

    1. hallo Rolf,

      1:   AddHandler cgi-script .cgi .pl
      Zu 1: Scripts werden in jedem Verzeichnis ausgeführt

      Ist probiert und stimmt _nur_ dann, wenn das "Verzeichnis" nicht auf einer FAT32 liegt (siehe der Hinweis auf die mount-Optionen).

      2:   ScriptAlias /cgi-bin/ d:/home/rolfrost/htdocs/cgi-bin/
      Zu 2: Scripts 'gehen' nur in /cgi-bin/ (Alias)

      Etwas diffiziler. "d:/home ..." kann ich eh nicht angeben (anderes System), aber ich kann "/_net/cgi-bin" angeben, wobei "/_net" eben auf einer FAT32 liegt, und dann klappt es nicht  -  oder ich kann "/var/www/cgi-bin" angeben, dann liegt es innerhalb der Linux-Partition, und dann klappt es.

      Es geht mir _nicht_ darum, daß ich meine Scripts nicht zum Laufen kreigen würde. Ich will nur verstehen, warum sie anscheinend nicht auf einer FAT32 liegen dürfen.

      Grüße aus Berlin

      Christoph S.

  3. (...)
    Mir fehlt das Verständnis dafür. Die Lösung besteht zwar darin, die Scripts an einen anderen Ort zu kopieren, aber mich interessiert es, warum auf dieser /dev/hda9 zwar ausführbare PHP-, aber keine ausführbaren CGI-Scripts liegen können.

    Dass PHP ist ja logisch, sofern du es nicht als CGI-executeable verwendest oder?

    Bez. CGI: Da gibts viele Möglichkeiten:
    a) was sagt die error.log?
    b) Was sagt ein su -c "/path/to/your/cgi-script" `ps aux | grep httpd | sed -ne '2p' | awk '{print $1}' ?

    Ohne Entfernen von "noexec" dürfte es wohl sicher nicht gehen, denn die CGI Scripts werden ausgeführt wie echte Programme. Hast du passende ScriptAliases fürs Scriptverzeichnis, Dateien unsw gesetzt?

    1. hi,

      Momentchen. Ich bin grade wieder zurück in WinXP, um nachzuschauen, ob meine Scripts da noch funktionieren mögen und kanns also nicht sofort umsetzen, aber:

      Was sagt ein su -c "/path/to/your/cgi-script" `ps aux | grep httpd | sed -ne '2p' | awk '{print $1}' ?

      Die pipe versteh ich nicht richtig. Mal der Reihe nach:
        - su -c "/path/to/your/cgi-script"
      ok, das versteht sich von selbst und gehört noch nicht zu pipe.
        - ps aux | grep httpd
      auch das erklärt sich von selbst, aber
        - sed -ne '2p' | awk '{print $1}'
      verstehe ich noch nicht ganz. Ich werde es nachprüfen, versprochen, sobald ich wieder auf Gentoo umgeschaltet habe.

      Ohne Entfernen von "noexec" dürfte es wohl sicher nicht gehen

      Jaja, schon gut ;-) Ich habe ja bereits gesagt, daß ich das auch ohne "noexec" probiert habe. Ich habe ja extra auf die /etc/fstab-Optionen verwiesen, weil ich ganz, ganz dunkel vermute, daß es eben an dieser Stelle hängen könnte. Möglicherweise ist es "umask", aber da bin ich nicht sicher, welche Angaben ich probieren könnte und/oder sollte  -  ähm, du willst mir glauben, daß ich alle verfügbaren man-pages gelesen (wenn auch möglicherweise nicht vollständig verstanden) habe.

      Hast du passende ScriptAliases fürs Scriptverzeichnis, Dateien unsw gesetzt?

      Ja. Von meinem Apache verstehe ich _dafür_ genug, sonst hätte ich es nie gewagt, meinen Artikel zur Veröffentlichung anzubieten, und er wäre wohl auch nicht angenommen worden. Also an der Apache-Konfiguration kanns nicht liegen, weil ich bei unveränderter Apache-Konfiguration meine Scripts ja dann zum Laufen kriege, wenn ich sie auf eine "nicht-Fat32-Partition" kopiere und sonst unverändert lasse. Ich wiederhole nochmal: wenn mein ScriptAlias auf einen Bereich der LINUX-Partition zeigt, geht alles problemlos, meine Scripts arbeiten wie ich es will. Zeigt der ScriptAlias aber auf eine Stelle, die auf einer gemounteten FAT32-Partition liegt, bekomme ich das berühmte "permission denied  -  premature end of headers". Und genau um diesen doofen "Sachverhalt" gehts mir.

      Grüße aus Berlin

      Christoph S.

  4. Hallo Christoph,

    leider kenne ich den Grund des Problems nicht, aber hast du es schonmal mit samba-mounts probiert?

    Viele Grüße,
    coolblue

    --

    never say oops after you submitted a job :-)
    _der_Ton_macht_die_Musik_!!!_