Introducción
Si está intentando solucionar un problema de permisos con su servidor web, antes de cambiar de forma recursiva los permisos a chmod 777
del directorio web, asegúrese de comprender lo que hace chmod -R 777
y por qué nunca debe establecer los permisos en 777.
Este artículo explica el modelo básico de permisos de Linux y qué significan los números correspondientes a los permisos.
Comprensión de los permisos de archivos de Linux
En Linux, el acceso a los archivos está controlado por el sistema operativo a través de permisos, atributos y propiedad de los archivos. Comprender el modelo de permisos del sistema de archivos de Linux le permite restringir el acceso a archivos y directorios solo a usuarios y procesos autorizados y hacer que su sistema sea más seguro.
Cada archivo es propiedad de un usuario y grupo en particular y se le asignan derechos de acceso de autorización para tres clases diferentes de usuarios:
- El propietario del archivo.
- Los miembros del grupo.
- Otros (todos los demás).
Hay tres tipos de permisos de archivo que se aplican a cada clase de usuario y le permiten especificar qué usuarios pueden leer el archivo, escribir en el archivo o ejecutar el archivo. Los mismos atributos de permiso se aplican tanto a archivos como a directorios con diferentes significados:
- Permiso para leer.
- El archivo es legible. Por ejemplo, cuando se establece el permiso de lectura, el usuario puede abrir el archivo en un editor de texto.
- Se puede ver el contenido del directorio. El usuario puede listar los archivos dentro del directorio con el comando
ls
- Permiso para escribir.
- El archivo se puede modificar o editar.
- El contenido del directorio se puede cambiar. El usuario puede crear nuevos archivos, eliminar archivos existentes, mover archivos, renombrar archivos, etc.
- Permiso para ejecutar.
- El archivo se puede ejecutar.
- El directorio se puede ingresar usando el comando
cd
Los permisos de archivo se pueden ver usando el comando ls
Aquí hay un ejemplo:
ls -l filename.txt
-rw-r--r-- 12 noviello users 11.0K Apr 7 20:51 filename.txt
|[-][-][-]- [------] [---]
| | | | | | |
| | | | | | +-----------> 7. Group
| | | | | +-------------------> 6. Owner
| | | | +--------------------------> 5. Alternate Access Method
| | | +----------------------------> 4. Others Permissions
| | +-------------------------------> 3. Group Permissions
| +----------------------------------> 2. Owner Permissions
+------------------------------------> 1. File Type
El primer carácter muestra el tipo de archivo. Puede ser un archivo normal ( -
), directorio ( d
), un enlace simbólico ( l
) o cualquier otro tipo especial de archivo.
Los siguientes nueve caracteres representan los permisos del archivo, tres tripletes de tres caracteres cada uno. El primer triplete muestra los permisos del propietario, el segundo los permisos de un grupo y el último triplete muestra los permisos de todos los demás.
Numero de autorización
La autorización del archivo se puede representar en formato numérico o simbólico. En este artículo, nos centraremos en el formato numérico.
El número de autorización puede constar de tres o cuatro dígitos, que van del 0 al 7.
Cuando se utiliza un número de 3 dígitos, el primer dígito representa los permisos del propietario del archivo, el segundo el grupo del archivo y el último representa a todos los demás usuarios.
Los permisos de escritura, lectura y ejecución tienen el siguiente valor numérico:
r
(leer) = 4w
(escribir) = 2x
(correr) = 1- sin autorización = 0
La cifra de permisos de una clase de usuario específica es la suma de los valores de permisos para esa clase.
Cada dígito del número de autorizaciones puede ser una suma de 4, 2, 1 y 0:
- 0 (0 + 0 + 0) - Sin autorización.
- 1 (0 + 0 + 1): solo realiza autorización.
- 2 (0 + 2 + 0): solo permiso de escritura.
- 3 (0 + 2 + 1): escribe y ejecuta permisos.
- 4 (4 + 0 + 0) - Solo permiso de lectura.
- 5 (4 + 0 + 1) - Leer y ejecutar la autorización.
- 6 (4 + 2 + 0): permisos de lectura y escritura.
- 7 (4 + 2 + 1) - Leer, escribir y ejecutar la autorización.
Por ejemplo, si el número de autorización se establece en 750, significa que el propietario del archivo tiene permisos de lectura, escritura y ejecución, el grupo de archivos tiene permisos de lectura y ejecución y otros usuarios no tienen permisos:
- Propietario:
rwx
= 4 + 2 + 1 = 7 - Grupo:
rx
= 4 + 0 + 1 = 5 - Otros:
rx
= 0 + 0 + 0 = 0
Cuando se usa el número de 4 dígitos, el primer dígito tiene el siguiente significado:
- setuid = 4
- setgid = 2
- pegajoso = 1
- sin cambio = 0
Los siguientes tres dígitos tienen el mismo significado que cuando se usa un número de 3 dígitos. Si el primer dígito es 0
, se puede omitir y el modo se puede representar con 3 dígitos. El modo numérico 0755
es igual que 755
.
Para ver los permisos de archivo en notación numérica (octal), use el comando stat
stat -c "%a" filename
644
Nunca use chmod 777
Establecer permisos 777 en un archivo o directorio significa que todos los usuarios podrán leerlo, escribirlo y ejecutarlo, y podría representar un gran riesgo de seguridad.
Por ejemplo, si cambia recursivamente los permisos de todos los archivos y subdirectorios del directorio /var/www
en 777
, cualquier usuario del sistema podrá crear, eliminar o modificar archivos en ese directorio.
Si tiene problemas de permisos con el servidor web, en lugar de establecer de forma recursiva el 777
, cambie la propiedad del archivo para el usuario que ejecuta la aplicación y establezca los permisos del archivo en 644
y los permisos del directorio en 755
.
La propiedad del archivo se puede cambiar usando el chown
y los permisos con el comando chmod
Digamos que tiene una aplicación PHP en su servidor ejecutándose como un usuario "noviello". Para establecer los permisos correctos, debe ejecutar:
chown -R noviello: /var/www
Solo el root, el propietario del archivo o el usuario con privilegios de sudo pueden cambiar los permisos de un archivo. Tenga especial cuidado al usar chmod
, especialmente cuando cambie los permisos de forma recursiva.
Conclusión
Si ejecuta un sistema Linux, es fundamental saber cómo funcionan los permisos de Linux.
Nunca debe establecer rwxrwxrwx
( 777
) para archivos y directorios. 777 significa que cualquiera puede hacer cualquier cosa con esos archivos.