2010-04-01 25 views
5

Gibt es eine Möglichkeit, PHP unter Apache zum Erstellen von Ordnern mit dem Ordner im Besitz des Eigentümers des Programms, das es erstellt, statt im Besitz von Apache zu erstellen?PHP Mkdir und Apache Besitz

Mit Wordpress werden neue Ordner zum Hochladen erstellt, aber diese gehören zu apache.apache und nicht zu der Site, auf der sie ausgeführt werden. Dies geschieht auch über Ostickets. Für jetzt müssen wir SSH in den Server und chmod den Ordner, aber es würde scheinen, dass es eine Einstellung irgendwo geben würde, um den Besitz außerhalb jedes möglichen Programms außer Kraft zu setzen, das es tut.

Antwort

2

Safe_mode ist auf Ihrem Server eingeschaltet. Die Funktion mkdir() erstellt Ordner mit Besitzer ("apache", "none", ..), die sich vom aktuellen Skriptbesitzer unterscheiden. Und Skripte konnten Dateien mit einem anderen Besitzer nicht in den Ordner hochladen (kopieren, kopieren), der nicht wie der aktuelle Eigentümer des Skripts ist.

Deaktivieren Sie safe_mode und das wäre Arbeit.

Weitere Informationen finden Sie unter http://php.net/manual/en/features.safe-mode.php.

P.S. Mit enable safe_mode können SieFunktion in PHP nicht verwenden.

+0

Dies funktioniert Sanhe - Vielen Dank –

+0

** Warnung Diese Funktion wurde ab PHP 5.3.0 und ab PHP 5.4.0 ENTFERNT. ** – Jim

1

Nicht direkt, nein. Sie können den Besitz einer Datei nicht an einen anderen Benutzer weitergeben, es sei denn, Sie sind root. Mit der Apache-Direktive "AssignUserID" können Sie ermitteln, ob dieser bestimmte vhost als bestimmter Benutzer/Gruppe ausgeführt werden soll. Damit Apache/PHP alle Dateien mit dem entsprechenden Eigentum schaffen würde

+0

Nur für den Fall, dass jemand anderes denkt, das könnte der Weg sein (mit dem mpm_perchild_module) - was ich dachte: aus dem Link: ** Dieses Modul ist nicht funktionsfähig. Die Entwicklung dieses Moduls ist nicht abgeschlossen und derzeit nicht aktiv. Verwenden Sie Perchild nicht, es sei denn Sie sind ein Programmierer, der bereit ist, es zu beheben.** – Jim

0

Check out PHP chown() Funktion

+1

Diese Funktion schlägt fehl, wenn sie nicht vom Superuser ausgeführt wird. – webbiedave

2

Eine andere Möglichkeit ist es, die Apache-Benutzer zu setzen und die „Kunden Benutzer“ in einer neuen Gruppe. Zusätzlich sollte das Verzeichnis das Sticky-Bit SGID verwenden, damit jede neue Datei die Gruppenzuordnung zu dieser neuen Gruppe erhält. Auf diese Weise der Webserver und die „Kunden Benutzer“ können

[17:57] [email protected] /tmp/test $ ls -al /tmp/test 
total 9 
drwxrwsr-x 2 root users 48 Apr 1 17:55 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 

ohne Probleme mit den Dateien arbeiten, wie Sie das Verzeichnis sehen SGID den Stick Bit bekam und der Besitzer ist die Gruppe „Benutzer“ in der ich (progman) bin. Nein, wenn ein anderer Benutzer eine Datei hinzufügt, wird die Gruppe automatisch auf diese Gruppe gesetzt

[17:55] proglap ~ # touch /tmp/test/x 

Dies wird von root ausgeführt. Jetzt erhalten wir:

[17:57] [email protected] /tmp/test $ ls -la /tmp/test 
total 9 
drwxrwsr-x 2 root users 72 Apr 1 17:59 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 
-rw-r--r-- 1 root users 0 Apr 1 17:59 x 

Wie Sie die hinzugefügte Datei, von der Wurzel, aber die Gruppe ist auf users und auf diese Weise ich kann es

[18:00] [email protected] /tmp/test $ rm x 
rm: remove write-protected regular empty file `x'? y 
[18:01] [email protected] /tmp/test $ ls -la /tmp/test 
total 9 
drwxrwsr-x 2 root users 48 Apr 1 18:01 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 

Denken Sie daran, dass Sie immer noch entfernen müssen Sie die chmod ändern, wenn Sie bearbeiten möchten die Datei als rw-r--r-- ist nur Gruppe Lesezugriff. Aber die chmod zu ändern, vielleicht sogar mit umask zu arbeiten, ist besser als der Umgang mit Root-Zugang und mit chown.