Ausführungsrechte für Scripte
Tom
- perl
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
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
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.
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
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
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
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
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
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
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
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
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___
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
Hello,
Frust macht sich breit, dass keine Tipps mehr kommen :-((
Enttäuschte Grüße aus http://www.braunschweig.de
Tom