2012-08-24 24 views
48

¿Cuál es el propósito de usar umask(0); en php?php umask (0) ¿cuál es el propósito

He visto esto algunas veces, y no puedo deducir de la documentación lo que hace precisamente.

¿Alguien puede explicar esto y cuándo sería útil usarlo?

+0

http://php.net/manual/en/function.umask.php Esto debería hlep a cabo, se trata básicamente de creación del archivo. – Sammaye

+5

@Sammaye Dijo que la documentación realmente no lo ayudó. –

+1

La documentación en el manual php para umask es increíblemente mala. – Adam

Respuesta

43

Configurar umask en 0000 (o simplemente 0) significa que los archivos o directorios creados recientemente no tendrán privilegios inicialmente revocados. En otras palabras, un umask de cero provocará que todos los archivos se creen como 0666 o que se puedan escribir en el mundo. Los directorios creados mientras umask es 0 serán 0777.

Por lo general, cuando ve umask(0), debe seguir directamente una llamada al chmod() para establecer explícitamente los permisos necesarios en el archivo o directorio recién creado a algo que no sea de escritura mundial.

¡Tenga cuidado al configurar umask en cero! Esto puede ser peligroso y principalmente solo es útil para crear archivos que el servidor web debe escribir más adelante, cuando el servidor web se ejecuta como un usuario diferente que un usuario "real" que también deberá poder modificar los archivos creado por el servidor web. De lo contrario, la umask predeterminada del sistema es probable que sea algo así como 0022, que puede escribir el propietario del archivo pero no otros. En ese caso, si inició sesión en la máquina con una cuenta de usuario normal, el archivo creado por el servidor web bajo PHP sería no, podrá escribirlo usted.

En lugar de crear archivos de escritura mundial, generalmente es una mejor idea administrar los directorios que el servidor web está escribiendo de manera más explícita. Si los archivos creados dentro de un directorio deben tener ciertos permisos de grupo, puede ser recomendable establecer el bit de sgid en el directorio para que los nuevos archivos dentro de él hereden la propiedad del grupo. Los usuarios que necesitan acceder al archivo deben ser miembros del grupo que tenga acceso a él. Esto es mucho más seguro que crear archivos legibles por el mundo y que se puedan escribir en el mundo.

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

La umask es básicamente una configuración predeterminada para crear archivos. En esencia, es más seguro activar tu chmod por defecto y luego escribir el archivo que escribirlo y luego modificarlo (algunos dicen). Al final del día, el tiempo entre terminar de escribir el archivo y ejecutar chmod sería de milisegundos en el mejor de los casos, por lo que soy escéptico al respecto.

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

Básicamente establece permisos de escritura predeterminado a lo que pones en el sistema operativo de como Linux y luego vuelve a la antigua para que pueda restablecer de nuevo. Esto se aplica al proceso de PHP en sí.

Los comentarios en la página del documento: http://php.net/manual/en/function.umask.php se aclararán con el ejemplo.

Cuestiones relacionadas