# Rechte von Apache/PHP



## F.o.G. (9. Januar 2003)

Hallo, 
ich habe auf einen Webserver ein spezielles Problem:

Wenn ich mit PHP auf diesem Server mit meinem Programm Verzeichnisse erstelle oder Dateien hochlade, so haben diese nur unzureichende Rechte (Read und Write nur für den Besitzer). Die entsprechenden Dateien können dementsprechend auch nicht mehr per FTP gelöscht werden. Die Verzeichnisse sollten eigentlich die Rechte 777 bekommen. Wie kann ich Apache bzw PHP die nötigen Rechte geben? chmod ist klar, aber welche Dateien muss ich chmodden? 

System: Redhat
ist ein Server von vserver.de

Ciao, F.o.G.


----------



## melmager (10. Januar 2003)

rein theoretisch geht das so:

im home verzeichnis von user wwwrun
(das ist der user von apache)
normalerweise das /var/lib/httpd

musst du eine datei erzeugen mit namen
.profile

und in der steht

umask 000

dat sollte es gewesen sein 

und fortan sind alle neu erzeugten dateien 666 und die verzeichnisse 777


----------



## F.o.G. (10. Januar 2003)

/var/lib/httpd exisitiert bei uns leider nicht. Es gibt das Verzeichnis /var/run, welches eine httpd.pid enthält. Jedenfalls funktioniert das ganze so nicht ..... 

Ich habe auch mal per ls -l geguckt, wie die Rechte in dem Ordner verteilt sind, welche von Apache/PHP erstellt wurden. Da gibt es ja zwei Spalten, die sicher Besitzer und gruppe angeben. In beiden steht Apache.

Vielleicht hilft das ja....

btw: wie kann man über SSH bzw. Putty Dateien uploaden? Geht das überhaupt?

Ciao, F.o.G.


----------



## Marcus Roffmann (11. Januar 2003)

Du musst dem Verzeichnis schonmal die nötigen Rechte geben in dem später die anderen Verzeichnisse angelegt werden sollen oder Dateien hochgeladen werden sollen. Wenn Du die Dateien hochlädst und denen gleich noch die Rechte 777 erteilst, dann hast Du keine Probleme mehr zumal Du Dich bei einem vserver doch als Root anmelden kannst, oder?

zu zweitem: Es gibt ein Proggy (muss selbst mal suchen) mit dem Du per SSH einen Dateiupload machen kannst.

[edit]
Gefunden: http://www.ssh.com/support/documentation/online/ssh/winhelp/32/File_Transfer-3.html
[/edit]


----------



## F.o.G. (11. Januar 2003)

das Verzeichnis in dem upgeloadet werden soll hat selbstverständlich 777. Mein Programm kann aber selber auch verzeichnisse erstellen. Die haben den Modus 755 mit Apache als Besitzer. 

Die hochgeladenen Dateien allerdings haben nur die Rechte 600. Meine Frage war nun, wie ich PHP die nötigen Rechte geben kann, damit es einen CHMOD ausführen kann.

Bevor die Frage kommt: ja, ich mache einen chmod auf die upgeloadeten Dateien. Ich poste jetzt mal die Fehlermessage, und auch hier will ich wieder vorgreifen: ja, der SAFE MODE ist ausgeschaltet, daher ist die folgende Fehler Message so verwunderlich:

Warning: SAFE MODE Restriction in effect. The script whose uid is 636 is not allowed to access uploads/files/20/thumbaltlandsberggross.jpg owned by uid 48 in /var/www/web2/html/cb/lib/CB_media.class.php on line 754

Die folgende Fehlermeldung ist auch etwas komisch: wenn PHP bzw. Apache der Besitzer ist, warum kann dann PHP nicht per GD auf die Datei zugreifen?

Warning: getimagesize: Unable to open 'uploads/files/20/thumbaltlandsberggross.jpg' for reading. in /var/www/web2/html/cb/lib/CB_media.class.php on line 754

Warning: Unable to access uploads/files/20/thumbthumbaltlandsberggross.jpg in /var/www/web2/html/cb/lib/CB_media.class.php on line 533

Warning: chmod failed: No such file or directory in /var/www/web2/html/cb/lib/CB_media.class.php on line 533

Warning: SAFE MODE Restriction in effect. The script whose uid is 636 is not allowed to access uploads/files/20/thumbaltlandsberggross.jpg owned by uid 48 in /var/www/web2/html/cb/lib/CB_media.class.php on line 722

Warning: getimagesize: Unable to open 'uploads/files/20/thumbaltlandsberggross.jpg' for reading. in /var/www/web2/html/cb/lib/CB_media.class.php on line 722

Warning: SAFE MODE Restriction in effect. The script whose uid is 636 is not allowed to access uploads/files/20/thumbaltlandsberggross.jpg owned by uid 48 in /var/www/web2/html/cb/lib/CB_media.class.php on line 543

So....also dieses Programm funktioniert auf etlichen Servern. Es handelt sich um mein CMS. Daher bin ich mir zu 100% sicher, dass es ein Server Problem ist.
Wenn ich einem der erstellten Verzeichnisse die Rechte 777 gebe, dann funktioniert auch alles perfekt. Aber warum kann PHP nicht selber die Verzeichnisse mit 777 erstellen bzw. wie kann ich das nun erreichen?

Ciao, F.o.G.


----------



## melmager (12. Januar 2003)

also das home verzeichnis von wwwrun
kannste aus der datei /etc/passwd
holen 

wemm das nicht geht was ich vorgeschlagen habe
dann versuch doch mal 

exec("umask 000"); im php script


ich hoffe doch das ganze passiert unter linux ?


----------



## F.o.G. (12. Januar 2003)

klar  im ersten Post stand das es ein RedHat System ist  Ansonsten: unter Windows gibt es  in der Regel solche Probleme nicht 

Also dein Tipp bewirkt zumindest, dass das Verzeichnis das Recht 777 bekommt. aber die Dateien haben immer noch zu wenig Rechte. Ich habe auch ein komisches Verhalten entdeckt: wenn ich ein Verzeichnis lösche und per FTP neu erstelle, dann geht alles tadellos. 

Ich hab keinen Plan mehr, was ich machen soll.....

Ciao, F.o.G.


----------



## F.o.G. (12. Januar 2003)

Warning: SAFE MODE Restriction in effect. The script whose uid is 636 is not allowed to access uploads/files/29/pbpattemplate.gif owned by uid 48 in /var/www/web2/html/cb/lib/CB_media.class.php on line 545

Ich habe diese UID's überprüft: 48 ist Apache, 636 ist in.ftpd

um die Dateien aus dem PHPtemp Verzeichnis zu kopieren, nutze ich move_uploaded_file(). Gibt es noch eine andere Möglichkeit?

EDIT: ich habe noch was anderes probiert: copy() ... die Datei hatte tatsächlich die Rechte 777, aber die Fehler kommen dennoch und GD kann dennoch nicht auf die Datei zugreifen. Es liegt an den Besitzer des Verzeichnisses. Ist dieser Apache, dann gibt es Probleme, ist es dagegen das FTP Programm mit der Gruppe, die den gleichen Namen wie die Subdomain trägt, funktioniert alles problemlos. 

Ka warum, bitte helft mir 

Ciao, F.o.G.


----------

