fopen() in Safe Mode
ThomasZ
- php
Ich habe folgendes Problem:
ich erzeuge ein neues Verzeichnis mit mkdir($i,0777);
dann will ich mit $fp=fopen("text","w"); eine datei darin erzeugen, allerdings läßt dies der safe mode des Servers nicht zu:
-------------------------------------------------------------------
Warning: SAFE MODE Restriction in effect. The script whose uid is 4847 is not allowed to access /home/usr/clan-tss/news/25 owned by uid 30 in /home/usr/clan-tss/addnews.php on line 30
-------------------------------------------------------------------
ich habe jetzt versuch mit PHP über FTP die Dateien hochzuladen, aber in diese dateien kann ich auch nicht hinein schreiben...
Was ich allerdings seltsam finde, ist das ich in andere verzeichnisse ohne problem schreiben kann und neue dateien erzeugen kann!
in dem verzeichnis, in dem ich das Verzeichnis erzeugen will hat natürlich chmod 777.
hoffe mir kann jemand helfen.
Thomas
Ich habe folgendes Problem:
ich erzeuge ein neues Verzeichnis mit mkdir($i,0777);
dann will ich mit $fp=fopen("text","w"); eine datei darin erzeugen, allerdings läßt dies der safe mode des Servers nicht zu:Warning: SAFE MODE Restriction in effect. The script whose uid is 4847 is not allowed to access /home/usr/clan-tss/news/25 owned by uid 30 in /home/usr/clan-tss/addnews.php on line 30
in dem verzeichnis, in dem ich das Verzeichnis erzeugen will hat natürlich chmod 777.
Das hat damit nichts zu tun. PHP läuft als Teil des Webservers und erzeugt Dateien und Verzeichnisse dementsprechend auch "im Namen" des Webservers (www, wwwrun oder wie immer er auf Deinem Server heißen mag). Das bedeutet, daß alle Benutzer dieses Webservers ihre Dateien unter dem gleichen Namen erzeugen und somit jeder Zugriff auf die Dateien aller anderen hat. Zugriffsrechte des Dateisystems haben deshalb auch absolut keine Wirkung.
Der Safe Mode von PHP versucht so gut es in dieser Situation eben geht, dem einen Riegel vorzuschieben, indem es vor Benutzung einer Datei oder sonstiger Objekte prüft, ob Eigentümer des Skriptes und Eigentümer der zu bearbeitenden Datei übereinstimmen.
Das erfüllt zwar seinen Zweck, hat allerdings den Nachteil, daß PHP auf Dateien, die PHP selbst erzeugt hat, anschließend nicht zugreifen kann: der Eigentümer der Datei ist halt der Webserver, nicht der des Skriptes.
Du wirst also nicht drumrum kommen, mit PHP keine Dateien zu erzeugen bzw. zu nutzende Dateien erst per FTP hochzuladen, damit Du auch Eigentümer dieser Dateien bist. Traurig, aber war.
Gruß,
soenk.e
PS: Datei steht hier als Ersatz für "alle Objekte des Dateisystems".
Hallo zusammen,
das hatte ich neulich schon mal etwas ausführlicher erläutert. Ich weiß leider nicht mehr, wie der Thread hieß:
Wenn Du ein Script geschreiben hast und es funktioniert, dann übertrag die Eigentumsrechte an dem Script dem wwwrun. Dieser Name ist der Standardname für den Webserver. Er könnte in der httpd.conf auch geändert werden.
Der wwwrun sollte aber nur Leserechte am Script haben.
r--rw----
Die Gruppe könnte dann z.B. webdesign heißen und Du als Programmierer solltest Mitglied der Grupp sein.
Die Dateien, die Du dann erzeugst, sollten nach durch den wwwrun lesbaren und durch den wwwrun beschreibbaren sortiert werden.
Bei Verzeichnissen vergiss nicht das ??x??x---
Others sollten grundsätzlich keine Rechte erhalten. Das provoziert nur Manipulationen durch Unautorisierte.
Beim Erzeugen der Datei durch PHP solltest Du den Befehl umask() benutzen, damit Eigentümer und Rechte gleich richtig sind.
Viel Spaß beim Experimentieren
Gruß
Tom