phpbar.de logo

Mailinglisten-Archive

[php] Fehler beim editieren von einer Systemdatei via php

[php] Fehler beim editieren von einer Systemdatei via php

Andreas Rath Andreas.Rath_(at)_gmx.at
Tue, 23 May 2000 09:08:15 +0200


-----------------------------------------------------------

On 23.05.00 at 06:56 florian leibert wrote:

>Hallo, ich habe folgendes kleines programm geschrieben und es mit "chmod +s"
>zum schreiben von dateien anderer benutzer berechtigt...
>trotzdem kommt folgender fehler:

[snip]

>Warning: fopen("/etc/named.conf","a") - Keine Berechtigung in
>/home/www/knmm.de/srvadmin/domain.php on line 14
>
>Warning: Supplied argument is not a valid File-Handle resource in
>/home/www/knmm.de/srvadmin/domain.php on line 22
>
>Warning: Supplied argument is not a valid File-Handle resource in
>/home/www/knmm.de/srvadmin/domain.php on line 24

mit chmod +s alleine erreichst Du noch nicht viel.
Wenn Deine Berechtigungen wie folgt ausschauen:

-rwsr-sr-x   1 ich      gruppe            31 Apr  4 09:28 domain.php

dann wuerde das nichts anderes bedeuten, als dass das OS das 
Programm als User 'ich' mit der GruppenId 'gruppe' starten wuerde.
Um auf Systemdateien zugreifen zu koennen, muesstest Du die 
Berechtigungen wie folgt setzen:

-rwsr-sr-x   1 root     root            31 Apr  4 09:28 domain.php

Das wuerde nun bedeuten, dass Dein Programm als root/root gestartet
werden wuerde.
Ja wuerde, und da kommt jetzt die Falle, ueber die ich auch schon gestolpert
bin:
Wenn wir mal den apache aussen vor lassen, und das Script direkt
von einer sh aus starten wuerden, dann passiert ja folgendes:
Die Shell liest die 1. Zeile der Programmdatei ein, und stoesst auf das 
shebang #!/usr/bin/php
Daraufhin startet die Shell den php-Interpreter mit Deinem Programmnamen
als Argument.
Und genau ab dem Moment sind Deine oben vergebenen Rechte irrelevant,
da ja eigentlich der Php-Interpreter gestartert wird, und Dein Programm
von dem ja wiederum nur ganz normal eingelesen und verarbeitet wird.
Um zu erreichen, dass Dein script nun als root/root laeuft, muesstest
Du schon den Interpreter mit root/root und +s ausstatten, wovon ich
aber dringenst abraten wuerde, weil dann _alle_ scripts als
root laufen!!

Unterm apache schaut das dann wieder anders aus:
Solange Du Dein Script nicht als CGI startest, sind die
Rechte wiederum vollkommen irrelevant, da der apache
die Datei ja wiederum nur ganz einfach oeffnet, und durch
das mod_php jagt.
Verwendest Du CGI, dann hast Du das gleiche Problem wie
oben: der php-Interpreter ist nicht root/root.

Die einzige Variante mit der das funktioniert, ist der
'suexec'-Mechanismus des apache.
Das funktioniert aber _nur_ mit CGI!
Das muss aber IMHO dem apache schon beim Kompilieren 
beigebracht werden.
Da gibts beim Apache aber eine gute Doku dazu, die
solltest Du wirklich _genau_ durchlesen!


Gruesse, Andy




php::bar PHP Wiki   -   Listenarchive