2012-08-24 18 views
48

Qual è lo scopo dell'utilizzo di umask(0); in php?php umask (0) qual è lo scopo

Ho visto alcune volte, e non riesco a capire dalla documentazione che cosa fa esattamente.

Qualcuno può spiegare questo e quando sarebbe utile da usare?

+0

http://php.net/manual/en/function.umask.php Questo dovrebbe farti saltare fuori, è fondamentalmente per la creazione di file. – Sammaye

+5

@Sammaye Ha detto che la documentazione non lo ha veramente aiutato. –

+1

La documentazione nel manuale php per umask è incredibilmente negativa. – Adam

risposta

43

Impostare umask su 0000 (o solo su 0) significa che i nuovi file o le directory create non avranno privilegi inizialmente revocati. In altre parole, uno umask di zero causerà la creazione di tutti i file come 0666 o scrivibili in tutto il mondo. Le directory create mentre umask sono 0 saranno 0777.

Generalmente quando si visualizza umask(0), è necessario seguire direttamente una chiamata a chmod() per impostare esplicitamente le autorizzazioni necessarie sul file o sulla directory appena creati su qualcosa di diverso da quello scrivibile in tutto il mondo.

Usare cautela quando si imposta la umask su zero! Questo può essere pericoloso ed è principalmente utile solo per creare file che devono essere scritti in seguito dal server Web, quando il server Web viene eseguito come utente diverso da un utente "reale" che dovrà anche essere in grado di modificare i file creato dal server web. In caso contrario, l'umask predefinito del sistema sarà probabilmente simile a 0022, modificabile dal proprietario del file ma non da altri. In tal caso, se si è effettuato l'accesso alla macchina con un normale account utente, il file creato dal server Web in PHP non è scrivibile dall'utente.

Piuttosto che creare file scrivibili in tutto il mondo, è generalmente una buona idea gestire le directory che il server web sta scrivendo in modo più esplicito. Se i file creati all'interno di una directory dovrebbero avere determinate autorizzazioni di gruppo, potrebbe essere consigliabile impostare il bit sgid sulla directory in modo che i nuovi file al suo interno ereditino la proprietà del gruppo. Gli utenti che devono accedere al file devono essere membri del gruppo che hanno accesso ad esso. Questo è molto più sicuro rispetto alla creazione di file leggibili a livello mondiale e scrivibili a livello mondiale.

php > umask(0); 
// Should get created as 666 
php > touch('file1.txt'); 

// "2" perms revoked from group, others, gets created as 644 
php > umask(022); 
php > touch('file2.txt'); 

// All revoked (2,4) from group, others, gets created as 600 
php > umask(066); 
php > touch('file3.txt'); 

-rw-rw-rw- 1 me group  0 Aug 24 15:34 file1.txt 
-rw-r--r-- 1 me group  0 Aug 24 15:35 file2.txt 
-rw------- 1 me group  0 Aug 24 15:37 file3.txt 
3

umask è fondamentalmente un'impostazione predefinita per la creazione di file. In sostanza è più sicuro attivare il chmod predefinito e poi scrivere il file piuttosto che scriverlo e poi chmod (alcuni dicono). Alla fine della giornata il tempo che intercorre tra la fine della scrittura del file e l'esecuzione di chmod sarebbe al massimo milisecondo, quindi sono scettico su questo.

umask() sets PHP's umask to mask & 0777 and returns the old umask 

Si stabilisce fondamentalmente i permessi di default di scrittura a tutto ciò che si mette in su OS di come Linux e poi restituisce il vecchio modo da poter ripristinare indietro. Questo vale per il processo PHP stesso.

I commenti sulla pagina doc: http://php.net/manual/en/function.umask.php chiariranno l'esempio.