2010-04-01 12 views
5

C'è un modo per impostare php in esecuzione in apache per creare cartelle con la cartella di proprietà del proprietario del programma che lo crea invece di essere di proprietà di apache?PHP mkdir e proprietà apache

Utilizzare word press per creare nuove cartelle da caricare, ma queste sono di proprietà di apache.apache e non del sito in cui sono in esecuzione. Ciò avviene anche tramite osticket. Per ora dobbiamo inserire SSH nel server e fare il chmod della cartella, ma sembrerebbe che ci sia un'impostazione da cui sovrascrivere la proprietà al di fuori di qualsiasi programma che lo faccia.

risposta

2

Safe_mode è acceso sul server. La funzione mkdir() crea una cartella con proprietario ("apache", "none", ..) diverso dal proprietario dello script corrente. E gli script non potevano caricare (spostare, copiare) i file in quella cartella con un altro proprietario (che non è come il proprietario attuale dello script).

Disabilitare safe_mode e quello sarebbe lavoro.

Vedere http://php.net/manual/en/features.safe-mode.php per dettagli.

P.S. Con abilitazione safe_mode non è possibile utilizzare la funzione chmod() in php.

+0

Questo ha funzionato Sanhe - Grazie –

+0

** Attenzione Questa funzione è stata sconsigliata a partire dal PHP 5.3.0 e rimosso come di PHP 5.4.0 **. – Jim

1

Non direttamente, n. Non puoi "dare via" la proprietà di un file a un altro utente, a meno che tu non sia root. Potresti investigare usando la direttiva apache "AssignUserID" per forzare quel particolare vhost ad essere eseguito come un particolare utente/gruppo. Con che Apache/PHP creerebbe alcun file con la proprietà appropriata

+0

Nel caso in cui qualcun altro pensi che questa potrebbe essere la strada da percorrere (utilizzando il mpm_perchild_module) - cosa che ho pensato: dal link: ** Questo modulo non è funzionale. Lo sviluppo di questo modulo non è completo e non è attualmente attivo. Non usare perchild a meno che tu non sia un programmatore disposto a contribuire a risolverlo.** – Jim

0

Partenza funzione PHP chown()

+1

Questa funzione fallirà se non viene eseguita da superutente. – webbiedave

2

Un altro modo è quello di mettere l'utente apache e gli "utenti del cliente" in un nuovo gruppo. Inoltre la directory dovrebbe usare il bit appiccicoso SGID così ogni nuovo file ha ottenuto l'assegnazione di gruppo a questo nuovo gruppo. In questo modo il server web e gli "utenti del cliente" possono lavorare con i file senza problemi

[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 .. 

Come si vede la directory ha il bit bastone SGID e il proprietario è il gruppo "utenti", in cui I (progman) sono. No se un altro utente aggiunge un file il gruppo viene automaticamente impostato su questo gruppo

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

Questo viene eseguito da root. Ora otteniamo:

[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 

Come vedi il file aggiunto è dalla radice, ma il gruppo è impostato per users e in questo modo ho possibile rimuoverlo

[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 .. 

Tenete a mente che è ancora è necessario modificare chmod se si desidera modificare il file come rw-r--r-- è solo accesso in lettura gruppo. Ma cambiare il chmod, magari anche lavorando con umask, è meglio che gestire l'accesso root e usare chown.