Tom: Ausführungsrechte für Scripte

Hello,

ich habe da einen sehr merkwürdigen Fehler, den ich mal wieder nicht finde.

Im Verzeichnis /home/thomas/public_html/perl habe ich zwei identische PERL-Testscripte, die sich nur durch die Extension unterscheiden (.cgi .pl).
Die Rechte für das Verzeichnis lauten:

-------r-x    1 root     root          104 Apr 16 01:25 hallo_welt.cgi
-------r-x    1 root     root          113 Apr 24 01:37 hallo_welt.pl

Die Scripte werden anstandslos ausgeführt.

Die gleichen Scripte liegen nochmals im Verzeichnis
/home/thomas/public_html/perl/starting

-rwxr-xr-x    1 thomas   szene         106 Apr 18 17:46 hallo_welt.cgi
-rwxr-xr-x    1 thomas   szene         108 Apr 24 05:51 hallo_welt.pl

Die Scripte in diesem Verzeichnis werden nur ausgeführt, wenn für die Gruppe r-x gesetzt ist. (Der Apache ist ebenfalls in dieser Gruppe).

Für das Verzeichnis ist eingestellt:

drwxr-xr-x    2 thomas   szene        4096 Apr 24 04:26 starting

In der httpd.conf ist für PERL eingestellt:

AddHandler cgi-script .pl .cgi

# To allow CGI execution in public userdirs subdir ~/perl and subdirs
    #
    <Directory /home/*/public_html/perl>
         Options +ExecCGI
         Order allow,deny
         Allow from all
    </Directory>

Es ist kein ScriptAlias für PERL mehr festgelegt.

Woran kann es jetzt liegen, dass die Scripte im Verzeichnis
/home/thomas/public_html/perl/starting nicht mit den Rechten
-------r-x  ausgeführt werden, sondern ein internal Sever-Error gemeldet wird. Im Log steht dann permission denied.

Das ist mir heute Morgen irgendwie zu hoch.

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  1. Hello,

    da habe ich wohjl bei der Auslegung der Verzeichnis- und Dateirechte noch was verkehrt verstanden.

    nobody ist Mitglied in keiner Gruppe
    paul ist Mitglied in Gruppe paul aber nocht in georg

    --- --- r--   root  paul           user = nobody     darf lesen
    --- --- r--   root  paul           user = paul       darf nicht lesen
    --- r-- r--   root  paul           user = paul       darf lesen
    --- --- r--   root  georg          user = paul       darf lesen

    Ist das nun eine "Spezialeinstellung" von meinem Testserver, die ich gar nicht haben wollte und bisher auch nicht bemerkt habe, oder ist dieses irre Verhalten der Standard?

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Moin,

      Ist das nun eine "Spezialeinstellung" von meinem Testserver, die ich gar nicht haben wollte und bisher auch nicht bemerkt habe, oder ist dieses irre Verhalten der Standard?

      Ich kann kein irres Verhalten entdecken. Du hast drei Gruppen von Rechtebits: User, Group und Other. Wenn der zugreifende Prozess der richtige User ist, dann gelten die ersten Bits; wenn der zugreifende Prozess (u.a.) in der genannten Group ist, dann gelten die zweiten Bits; ansonsten die dritte Gruppe.

      --
      Henryk Plötz
      Grüße aus Berlin
      ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
      ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
      1. Hello,

        Ich kann kein irres Verhalten entdecken. Du hast drei Gruppen von Rechtebits: User, Group und Other. Wenn der zugreifende Prozess der richtige User ist, dann gelten die ersten Bits; wenn der zugreifende Prozess (u.a.) in der genannten Group ist, dann gelten die zweiten Bits; ansonsten die dritte Gruppe.

        Naja, wenn es denn überall so erklärt stände, hätte ich mich wohl auch nicht gewundert. Ich habe genügend Beschreibungen gesehen, die von einer Addition der Rechte sprechen. Wen also o=rwx würden alle User alles dürfen. Das ist aber nicht so. Wenn ein User nun in der Group ist mit g=---, ann darf der gar nix, usw.

        Naja, man lernt eben nicht aus.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Hallo Tom,

          ... Wen also o=rwx würden alle User alles dürfen. Das ist aber nicht so. Wenn ein User nun in der Group ist mit g=---, ann darf der gar nix, usw.

          Das ist aber logisch. Auf der anderen Seite ist es eher die Ausnahme, dass der Besitzer oder die Gruppe weniger Rechte besitzen als der "Rest der Welt".

          Und wenn der Benutzer Besitzer ist, sich in der Gruppe befindet, der die Datei gehört und die Rechte beispielsweise

          -r-----r--    1 paul  paul   104 Apr 16 01:25 hallo_welt.cgi

          gesetzt sind, dann darf Benutzer paul die Datei lesen.

          other = Alle - Gruppe - Besitzer.

          Freundliche Grüsse,

          Vinzenz

          1. Hello,

            Das ist aber logisch. Auf der anderen Seite ist es eher die Ausnahme, dass der Besitzer oder die Gruppe weniger Rechte besitzen als der "Rest der Welt".

            Logisch ist daran gar nichts, da Rechtesysteme dieser Art bereits viel zu viele Freiheitsgrade haben. Man muss also wissen, wie die Rechte-"Logik" definiert ist. Und da erschreckt es mich, wieviele Linux-"Tutorials" hier falsches verbreiten. Ich selber bin durch die häufig abwechselnde  Verwendung von NOVELL, Windows NT / 2000, LINUX nun auch darauf hereingefallen. Zum Glück habe ich es bisher immer so gemacht, wie Du sagtest: Owner hatte immer die meisten Rechte (rwx), dann kam die Gruppe mit ggf. nur (r-x) und zum Schluss bestenfalls noch der Universaluser mit (r--).

            Aber die Gefahr liegt wo ganz anders.

            LINUX arbeitet also nach dem first match Prinzip. Das begründet eine Sicherheitslücke, zumindest eine Denklücke. Stell Dir vor, Du hast eine Reihe von Usern, die über ihre Gruppe für eine Datei Leserecht haben. Aus irgend einem Grund erteilst Du nun World auf diese Datei Ausführungsrechte. Alle Mitglieder dieser Gruppe dürfen aber nur lesen.
            Irgendwann entscheidest Du dich, einen User aus der Gruppe herauszunehmen und siehe da, nun hat er plötzlich mehr Rechte als vorher. Das ist eben unlogisch. Man nimmt jemandem eine Eigenschaft und er erhält dadurch mehr Rechte.

            Gewiss, dass jemdand seine Rechte so vergibt, ist nicht unbedingt der Standardfall, aber er ist möglich und verwirrend.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Hallo,

              wenn du dir sicher gehen willst, dass du keine privaten dateien für irgendjemanden lesbar machen willst beim erstellen so kannst du mit dem befehl umask die create maske der rechte verändern.

              gruss

              --
              no strict;
              no warnings;
              Über eine Rückmeldung freut sich später jeder, der das gleiche Problem hat und im Archiv nach einer Lösung sucht.
              1. Hello,

                wenn du dir sicher gehen willst, dass du keine privaten dateien für irgendjemanden lesbar machen willst beim erstellen so kannst du mit dem befehl umask die create maske der rechte verändern.

                Ja danke, das machen meine Scripte schon. Außerdem kann man die Maske für die Shell ja auch ins .profile des Users eintragen. Ich denke, die Rechtegeschichte nebst safe_mode werde ich auch nochmal genauer untersuchen und ein(ige) Kapitel daraus machen.

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. Nochmal hello zu diesem Thema,

    Scripte liegen im Verzeichnis

    /home/thomas/public_html/perl/arrays

    -rwxr-xr-x    1 thomas   szene         106 Apr 18 17:46 show_array.pl

    Die Scripte in diesem Verzeichnis werden nur dann ausgeführt, wenn für die Gruppe r-x UND für world r-x gesetzt ist. (Der Apache ist ebenfalls in dieser Gruppe).

    Wenn die Gruppeneinstellungen fehlen, gibt es einen

    internal Server Error

    Wenn die world-Einstellungen fehlen, gibt es einen 403-Error

    Der perl-Interpreter liegt im Verzeichnis

    /usr/bin/         root     root     drwxr-xr-x
      /usr/bin/perl     root     root     -rwxr-xr-x

    Nun habe ich folgende Theorie entwickelt, und bitte um Kommentar:

    Der Perlinterpreter ist vom Webserver nur über world zu erreichen, da er weder Owner noch Group erfüllt.
    Das Executable ist aber für den Webserver nur lesbar, wenn die Gruppenrechte passen, da er auch Mitglied der Gruppe szene ist.
    Wenn das Script jetzt nur über Gruppenrechte gelesen wird, werden diese beim Aufruf des Interpreters weitergegeben und reichen dann dort nicht aus, den Interpreter zu starten. Also müssen beim Script SOWOHL Gruppen-, als auch World-Rechte passen.

    Welcher Mechanismus steckt dahinter und wie heißt der ggf.?

    "Portierung der Rechte in Childprozess"?

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hello, noch eine Ergänzung:

      Eintrag im LOG, nachdem ich für den Interpreter

      -rwxr-xr-x    3 root     szene

      und für das Script

      -rwxr-x---    1 thomas   szene

      eingetellt habe.

      [Sun Apr 25 11:59:52 2004] [error] [client 192.168.101.114] file permissions deny server execution: /home/thomas/public_html
      /perl/arrays/show_array.pl

      Nun kapier ich gar nix mehr und brauche dringend jemand, der mir mal den Mechanismus dahinter erklärt. Werde mich jetzt erstmal durch "Linux Unix Systemprogrammierung" fresse. Vieleicht finde ich da noch eine qualifizierte Aussage.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      1. Hallo,

        gib dir doch einfach mal mit einem skript die ganzen ENV variablen aus, da müsste stehen unter welchem benutzer das skript ausgeführt wird.
        ich glaube bei mod_userdir wird das skript als user ausgeführt und nicht als apache account.

        gruss

        --
        no strict;
        no warnings;
        Über eine Rückmeldung freut sich später jeder, der das gleiche Problem hat und im Archiv nach einer Lösung sucht.
        1. Hallo,

          zum beispiel: id gibt dir zurück, wer du bist.
          in dem fall hab ich meine userid und nicht die daemon id zurückerhalten (mod_userdir)

          gruss
          __start__
          #!/usr/local/bin/bash
          echo "Content-type: text/html;\n\n"
          id
          __end___

          --
          no strict;
          no warnings;
          Über eine Rückmeldung freut sich später jeder, der das gleiche Problem hat und im Archiv nach einer Lösung sucht.
  3. Hello,

    schade, immer noch kein Tipp vorhanden, woran es liegt...

    Ich glaube auch schon nicht mehr daran, dass mir jemand helfen kann. *schnüff*

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hello,

      Frust macht sich breit, dass keine Tipps mehr kommen :-((

      Enttäuschte Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen