¿Por qué el script PHP no crea un directorio con permisos 777?

En PHP, no podemos crear un directorio con permiso 777 debido a umask predeterminado . La umask se denomina máscara de usuario o máscara de creación de archivos de usuario. Este es un tipo de permiso base o permiso predeterminado que se otorga cuando se crea un nuevo archivo o carpeta. El valor predeterminado de umask es generalmente 022 . El umask establece qué permisos deben eliminarse del sistema predeterminado cuando crea un archivo o un directorio. 

En primer lugar, comprendamos cómo funciona realmente umask durante la creación de archivos o directorios y la configuración de permisos. Usaremos la función mkdir() en los siguientes ejemplos. 

  • Ejemplo 1: 
     
For example, a mask 0022 means that you don't want 
group and others modify the file.

default 0666 rw-.rw-.rw-
umask   0022 ---.-w-.-w-
Final   0644 rw-.r--.r--

That means any file from now will have 0644 permissions.

Es importante comprender que umask revoca, elimina los permisos predeterminados del sistema, por lo que no puede otorgar permisos que el sistema predeterminado no tiene. En el ejemplo anterior, con el sistema 666 predeterminado, no hay forma de que pueda usar umask para crear un archivo con permiso de ejecución. 

  • Ejemplo 2: suponga que el permiso del nuevo directorio creado es 665 O mkdir («geeks», 655); La carpeta “geeks” tendrá permiso: drw–wx-wx 

     

The original permission according to 655 is drw-r-xr-x.
But the result is drw--wx-wx.
Permission to be applied: 655
Default umask           : 022
Final                   : 633

This is obtained by performing subtraction.

Entonces, cuando tratamos de crear un directorio con el permiso 777, en lugar de obtener drwxrwxrwx , obtenemos drwxr-xr-x, que corresponde a 755 (restando 022 de 777). Esta es la razón por la que no podemos crear un directorio con el permiso 777. 

Aún no ha terminado, como nunca dije, es imposible crear un directorio con el permiso 777. Entonces, aprendamos cómo crear un directorio con el permiso 777, siga los pasos a continuación: 
 

  • Paso 1: esta línea cambia el umask a cero mientras almacena el anterior en $oldmask
     
$oldmask = umask(0)
  • Paso 2: esta línea hace que el directorio use los permisos deseados y (ahora irrelevante) umask
     
mkdir("Geeks", 777);
  • Paso 3: Esta línea restaura el umask a lo que era originalmente. 
     
umask($oldmask);

Así es como puede crear un directorio con permiso 777. El permiso 777 en representación simbólica para el directorio es drwxrwxrwx . Este permiso permite que el usuario propietario, el grupo y otros lean, escriban y ejecuten, por lo que no tiene restricciones. Este permiso significa que cualquiera que sea usuario en el mismo servidor puede leer, escribir y ejecutar el archivo. En el caso de una carpeta, cualquier persona que sea usuario podrá copiar archivos en ella. Obviamente, esto suena peligroso si está utilizando un servidor compartido para su sitio web. 

Referencias: https://www.php.net/manual/en/function.umask.php
 

Publicación traducida automáticamente

Artículo escrito por Rajnis09 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *