Mailinglisten-Archive |
-----------------------------------------------------------
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