Apache PHP - User für mkdir() ändern, sonst kein fopen()

Alles, was den Apache betrifft, kann hier besprochen werden.

Apache PHP - User für mkdir() ändern, sonst kein fopen()

Postby OpenSoul » 26. March 2010 10:24

Hallo alle zusammen,

ich habe folgendes Problem:

Mit einem kleinen PHP-Script lasse ich Ordner und auch Dateien auf meinem Webspace erstellen (Webspace liegt auf einem Root-Server, habe also vollen Zugriff darauf).

Mit
Code: Select all
mkdir("connec/".$code)
erstelle ich den Ordner (nehmen wir mal an, dass in der Variable $code der Wert "Folder" steht).

Dann setzte ich auch schon gleich die vollen Schreib- und Lesereche:
Code: Select all
chmod ("connec/".$code, 0777)

Der Ordner wird unter dem User "www-data" und der Gruppe "www-data" erstellt, wenn ich jetzt allerdings via FTP eine Datei auf den Server lade ist diese vom User "klaus" und von der Gruppe "psacln".
Wenn ich jetzt via
Code: Select all
fopen("connec/".$code."/test.txt" , "w+")
eine Datei in diesem neuangelegtem Verzeichnis erstellen möchte, bekomme ich (natürlich) eine Fehlermeldung, dass der User keine Rechte hat eine Datei in diesem neuangelegtem Verzeichnis zuerstellen:
Code: Select all
Warning: fopen() [function.fopen]: SAFE MODE Restriction in effect. The script whose uid is 10001 is not allowed to access /var/www/vhosts/test34e32.de/httpdocs/root/connec/Folder owned by uid 33 in /var/www/vhosts/test34e32.de/httpdocs/root/create.php  on line 36
(Hinweis: Den "safe_mode" habe ich abgeschaltet (off)).

Habe auch schon versucht den Befehl
Code: Select all
chgrp ("connec/".$code, psacln);
nach dem Erstellen der Verzeichnises auszuführen, allerdings darf man das nur als Superuser und ich bekomme die Meldung:
Code: Select all
Warning: chgrp() [function.chgrp]: Operation not permitted in /var/www/vhosts/test34e32.de/httpdocs/root/code.php  on line 19
Aber das war ja abzusehen.

Wie kann ich dem Apache nun sagen, dass wenn via PHP-Script ein Verzeichnis angelegt wird, er dieses unter dem User "klaus" und der Gruppe "psacln" anlegen soll?

Gruß OpenSoul
OpenSoul
 
Posts: 4
Joined: 26. March 2010 10:01

Re: Apache PHP - User für mkdir() ändern, sonst kein fopen()

Postby Nobbie » 26. March 2010 13:59

OpenSoul wrote:"safe_mode" habe ich abgeschaltet (off)).


PHP lügt nicht - mit anderen Worten: safe_mode ist aktiv, nur mußt Du herausfinden, was Du beim "Abschalten" falsch gemacht hast.

OpenSoul wrote:Wie kann ich dem Apache nun sagen, dass wenn via PHP-Script ein Verzeichnis angelegt wird, er dieses unter dem User "klaus" und der Gruppe "psacln" anlegen soll?


Indem Du den Apache Process genau mit diesen User-Daten laufen läßt, entsprechende Angaben (User, Group) erfolgen in der httpd.conf. Wenn Du mit mod_php arbeitest, geht es nur so.

Wenn Du mit fcgi arbeitest, gibt es auch eine Möglichkeit, mit "suexec" die Benutzerangabe zur Laufzeit festzulegen. Da wirst Du mit "fcgi suexec" sicherlich viel in Google finden.
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Re: Apache PHP - User für mkdir() ändern, sonst kein fopen()

Postby OpenSoul » 26. March 2010 14:36

Nobbie wrote:PHP lügt nicht - mit anderen Worten: safe_mode ist aktiv, nur mußt Du herausfinden, was Du beim "Abschalten" falsch gemacht hast.

Ich habe in der php.ini die Direktive "safe_mode" auf "off" gesetzt. Hier die Zeile, wie sie bei mir 1:1 in der php.ini steht:
Code: Select all
safe_mode = Off


Nobbie wrote:Indem Du den Apache Process genau mit diesen User-Daten laufen läßt, entsprechende Angaben (User, Group) erfolgen in der httpd.conf. Wenn Du mit mod_php arbeitest, geht es nur so.

Hätte erwähnen sollen, dass bei mir der Apache2 läuft, die Konfigdatei wäre damit die apache2.conf. Aber gut, das nur am Rande... :wink:
Wenn ich den User und die Gruppe umsetze bekomme ich einen "Internal Server Error" wenn ich über den Browser auf eine Webseite zugreifen möchte. Anscheind mag der Apache keine anderen User/Gruppen... :(
OpenSoul
 
Posts: 4
Joined: 26. March 2010 10:01

Re: Apache PHP - User für mkdir() ändern, sonst kein fopen()

Postby Nobbie » 26. March 2010 14:46

OpenSoul wrote:Ich habe in der php.ini die Direktive "safe_mode" auf "off" gesetzt. Hier die Zeile, wie sie bei mir 1:1 in der php.ini steht:
Code: Select all
safe_mode = Off


Dann mußt Du jetzt nur noch herausfinden, ob Du die richtige php.ini bearbeitet hast, und wenn auch das der Fall ist, mußt Du nachschauen, ob nicht ggf. in einem virtuellen Host via php_admin_flag (oder php_value) der Wert von safe_mode wieder auf "On" gesetzt wird (letzteres ist eine sehr typische Konfiguration bei vServern, beispeislweise bei http://www.vserver.de).

OpenSoul wrote:Wenn ich den User und die Gruppe umsetze bekomme ich einen "Internal Server Error" wenn ich über den Browser auf eine Webseite zugreifen möchte. Anscheind mag der Apache keine anderen User/Gruppen... :(


Das ist doch klar, wenn Du so eine tiefgreifende Änderung machst, dass Du User und Group für den Apache Process änderst, dass Du dann natürlich auch selbstverständlich sicherstellen mußt, dass immer noch genügend Lese- und Schreibrechte für Apache vorliegen und die einzelnen Ordner (htdocs usw.) und Dateien immer noch lesbar (und ggf. änderbar) sind. Da musst Du sicherlich einige Dateien und Ordner anpassen. Konkrete Hinweise findest Du im error.log, da schreibt Apache den Grund für den Internal Server Error hinein.
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Re: Apache PHP - User für mkdir() ändern, sonst kein fopen()

Postby OpenSoul » 26. March 2010 14:57

Habe meinen virtuellen Server bei Host Europe. Dann werde ich wohl später mal bei denen anrufen und mich erkundigen.
Darf ich davon ausgehen, dass der Fehler behoben sein müsste, wenn der Safe_mode dann auch "wirklich" angeschaltet ist, ohne den User vom Apache zu ändern? (Denn drauf habe ich nicht so wirklich Lust :wink: - Auch wenn hier vermutlich das Sprichwort "Ohne Fleiß kein Preis" meine Lage vermutlich deutlich unterstreicht...)
OpenSoul
 
Posts: 4
Joined: 26. March 2010 10:01

Re: Apache PHP - User für mkdir() ändern, sonst kein fopen()

Postby Nobbie » 26. March 2010 15:43

OpenSoul wrote:Darf ich davon ausgehen, dass der Fehler behoben sein müsste, wenn der Safe_mode dann auch "wirklich" angeschaltet ist, ohne den User vom Apache zu ändern?


Jain. Die Meldungen, die auf dem safe_mode basieren (UserID des Scripts != UserID des zu bearbeitenden Files) werden verschwinden, aber dennoch sind natürlich die Dateien, die via FTP auf den Server kommen, mit anderer UserID versehen als die Dateien, die via PHP und Apache erstellt werden. Je nach "umask" (das ist die Defaulteinstellung für die Dateirechte) kann es dann immer noch passieren, dass Du mit PHP eine Datei, die via FTP erstellt wurde, nicht bearbeiten kannst (das kann ich von hier aus nicht beurteilen).

Du kannst natürlich (so oder so, auch mit safe_mode On) via ssh (mit Putty beispielsweise) auf Deinen Server gehen und (nachdem Du via FTP die Dateien angelegt hast) als User "root" mittel "chown" sämtliiche Dateien an den User www-data (beispielsweise) geben. Dann verschwinden die Meldungen auch und auch die Dateirechte sind damit erledigt, da nun die Dateien quasi Apache gehören. Dieses Prozedere ist natürlich nur dann praktikabel, wenn nur Du via FTP Dateien hochlädst. Wenn durch andere Anwender oder Scripts Dateien via FTP hochgeladen werden, kannst Du nur schlecht hinterherdackeln.
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Re: Apache PHP - User für mkdir() ändern, sonst kein fopen()

Postby OpenSoul » 26. March 2010 19:58

Okay, dann weiß ich Bescheid. Vielen Dank für deine Infos! Hast mir sehr geholfen :!:
OpenSoul
 
Posts: 4
Joined: 26. March 2010 10:01


Return to Apache

Who is online

Users browsing this forum: No registered users and 17 guests