Cómo Verificar Permisos de Archivos en Linux: Una Guía Completa
Linux alimenta la mayoría de los servidores del mundo — desde entornos de VPS Hosting hasta Servidores Dedicados de nivel empresarial — y por una buena razón. Es rápido, estable y construido con seguridad en su núcleo. Uno de los pilares más fundamentales de esa seguridad es el sistema de permisos de archivos: un mecanismo preciso y elegante que controla exactamente quién puede leer, modificar o ejecutar cualquier archivo o directorio en el sistema.
Ya seas un desarrollador implementando una aplicación web, un administrador de sistemas endureciendo un servidor, o un principiante aprendiendo la línea de comandos, entender cómo verificar e interpretar permisos de archivos en Linux es una habilidad innegociable. Esta guía cubre todo lo que necesitas saber — desde los conceptos básicos del modelo de permisos hasta bits especiales avanzados — con comandos prácticos y ejemplos del mundo real.
¿Qué son los permisos de archivos de Linux?
Cada archivo y directorio en Linux tiene un conjunto de permisos adjuntos. Estos permisos definen qué acciones están permitidas y por quién. Hay tres tipos de permisos principales:
| Permiso | Símbolo | Qué hace en un archivo | Qué hace en un directorio |
|---|---|---|---|
| Lectura | r | Ver el contenido del archivo | Listar los nombres de archivos dentro |
| Escritura | w | Modificar o eliminar el archivo | Crear o eliminar archivos dentro |
| Ejecución | x | Ejecutar el archivo como un programa | Entrar (navegar dentro) en el directorio |
Estos tres permisos se aplican independientemente a tres categorías de usuarios distintas:
- Propietario (usuario) — El usuario que posee el archivo, típicamente su creador.
- Grupo — Cualquier usuario que pertenezca al grupo asignado del archivo.
- Otros — Todos los demás en el sistema.
Esta matriz de permisos de tres por tres le da a los administradores de Linux un control granular y poderoso sobre el acceso a cada recurso en el sistema.
Cómo verificar permisos de archivos: El comando ls -l
El método más rápido y comúnmente utilizado para verificar permisos de archivos es el comando ls -l (formato de listado largo).
ls -l file.txtEjemplo de salida:
-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 file.txtDesglosemos cada componente de esta salida:
- rw- r-- r-- 1 alice developers 1024 Aug 16 12:30 file.txt
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ └─ Filename
│ │ │ │ │ │ │ │ └─ Last modified
│ │ │ │ │ │ │ └─ File size (bytes)
│ │ │ │ │ │ └─ Group name
│ │ │ │ │ └─ Owner name
│ │ │ │ └─ Number of hard links
│ │ │ └─ Others' permissions
│ │ └─ Group's permissions
│ └─ Owner's permissions
└─ File type (- = regular file, d = directory, l = symlink)Entonces -rw-r--r-- nos dice:
- Propietario (
alice): Lectura + Escritura (rw-) - Grupo (
developers): Solo lectura (r--) - Otros: Solo lectura (
r--)
Verificar permisos para múltiples archivos
Para ver permisos de todos los archivos en un directorio a la vez:
ls -la /var/www/htmlLa bandera -a incluye archivos ocultos (aquellos que comienzan con un punto). Esto es especialmente útil al auditar directorios de servidores web en un entorno de Alojamiento Web Compartido o VPS.
Obtener información detallada de permisos con stat
Para un desglose más exhaustivo — incluyendo representaciones tanto simbólicas como numéricas — usa el comando stat:
stat file.txtEjemplo de salida:
File: file.txt
Size: 1024 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 131073 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ alice) Gid: ( 1000/developers)
Access: 2024-08-16 12:30:00.000000000 +0000
Modify: 2024-08-16 12:30:00.000000000 +0000
Change: 2024-08-16 12:30:00.000000000 +0000La línea clave es:
Access: (0644/-rw-r--r--) Uid: ( 1000/ alice) Gid: ( 1000/developers)Esto te proporciona:
- Notación numérica (octal):
0644 - Notación simbólica:
-rw-r--r-- - ID de usuario (UID) e ID de grupo (GID) con sus nombres legibles por humanos
El comando stat es invaluable cuando se solucionan errores de permisos en servidores de producción, ya que proporciona todo el contexto que necesitas en una sola salida.
Entender la notación numérica (octal) de permisos
Los permisos de Linux se pueden expresar como números, que es el formato utilizado por comandos como chmod. A cada tipo de permiso se le asigna un valor:
| Permiso | Valor numérico |
|---|---|
Lectura (r) | 4 |
Escritura (w) | 2 |
Ejecución (x) | 1 |
Sin permiso (-) | 0 |
Calculas el valor de permiso para cada categoría de usuario sumando los valores juntos:
| Combinación | Cálculo | Valor numérico |
|---|---|---|
rwx | 4 + 2 + 1 | 7 |
rw- | 4 + 2 + 0 | 6 |
r-x | 4 + 0 + 1 | 5 |
r-- | 4 + 0 + 0 | 4 |
--- | 0 + 0 + 0 | 0 |
Un número octal de tres dígitos representa el conjunto completo de permisos:
0644 → Owner: 6 (rw-) | Group: 4 (r--) | Others: 4 (r--)
0755 → Owner: 7 (rwx) | Group: 5 (r-x) | Others: 5 (r-x)
0700 → Owner: 7 (rwx) | Group: 0 (---) | Others: 0 (---)Verificar permisos en directorios
Los directorios utilizan el mismo modelo de permisos, pero el significado de cada bit es ligeramente diferente. Usa ls -ld (nota la bandera -d) para inspeccionar un directorio en sí en lugar de su contenido:
ls -ld myfolderEjemplo de salida:
drwxr-x--- 2 alice developers 4096 Aug 16 12:30 myfolderEl d inicial confirma que esto es un directorio. Los permisos se desglosan como:
- Propietario (
alice):rwx— Puede listar, crear/eliminar archivos y entrar en el directorio - Grupo (
developers):r-x— Puede listar archivos y entrar, pero no puede crear o eliminar - Otros:
---— Sin acceso en absoluto
> Importante: El bit de ejecución (x) en un directorio significa la capacidad de entrar en él (es decir, usar cd). Sin x, un usuario no puede navegar en el directorio incluso si tiene permiso de lectura. Esta es una fuente común de confusión para los principiantes.
Bits de permiso especiales: setuid, setgid y sticky bit
Más allá de los nueve bits de permiso estándar, Linux admite tres bits de permiso especiales que proporcionan control de acceso avanzado:
1. setuid (s en el bit de ejecución del propietario)
Cuando se establece en un archivo ejecutable, el programa se ejecuta con los privilegios del propietario del archivo en lugar de los del usuario que lo llama. Así es como comandos como passwd permiten a usuarios regulares modificar /etc/shadow (que es propiedad de root).
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Mar 27 2023 /usr/bin/passwdEl s en la posición de ejecución del propietario indica setuid.
2. setgid (s en el bit de ejecución del grupo)
En un archivo, el programa se ejecuta con los privilegios del grupo. En un directorio, los archivos nuevos creados dentro heredan automáticamente el grupo del directorio — útil para carpetas de proyectos compartidos.
ls -ld /shared/project
drwxrwsr-x 2 alice developers 4096 Aug 16 12:30 /shared/project3. Sticky Bit (t en el bit de ejecución de otros)
Cuando se establece en un directorio, solo el propietario del archivo (o root) puede eliminar o renombrar archivos dentro de él, incluso si otros tienen permiso de escritura. Esta es la configuración estándar para /tmp:
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpEl t al final señala que el sticky bit está activo.
Representación numérica de bits especiales:
| Bit especial | Valor numérico |
|---|---|
| setuid | 4000 |
| setgid | 2000 |
| Sticky bit | 1000 |
Entonces drwxrwxrwt = 1777 (1000 + 777).
Tabla de referencia de permisos completa
| Simbólico | Numérico | Significado en un archivo | Significado en un directorio |
|---|---|---|---|
--- | 0 | Sin acceso | Sin acceso |
--x | 1 | Solo ejecución | Solo entrar |
-w- | 2 | Solo escritura | Modificar contenidos (con x) |
-wx | 3 | Escritura + Ejecución | Entrar y modificar |
r-- | 4 | Solo lectura | Listar nombres (requiere x para ser útil) |
r-x | 5 | Lectura + Ejecución | Listar y entrar |
rw- | 6 | Lectura + Escritura | Listar y modificar (sin entrar) |
rwx | 7 | Acceso completo | Control total |
Ejemplos de permisos del mundo real
Aquí están los patrones de permisos más comunes que encontrarás en la práctica:
-rw-r--r-- (0644) — Archivo estándar
-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 config.txtEl propietario puede leer y escribir. El grupo y otros solo pueden leer. Típico para archivos de configuración y contenido web.
-rwxr-xr-x (0755) — Script ejecutable o binario
-rwxr-xr-x 1 alice developers 4096 Aug 16 12:30 deploy.shEl propietario tiene acceso completo. Todos los demás pueden leer y ejecutar pero no pueden modificar. Estándar para scripts de shell, binarios de servidores web y ejecutables públicos.
-rw------- (0600) — Archivo privado
-rw------- 1 alice alice 1679 Aug 16 12:30 id_rsaSolo el propietario puede leer o escribir. Sin acceso para nadie más. Requerido para claves privadas SSH — SSH se negará a usar un archivo de clave con permisos más amplios.
drwxr-xr-x (0755) — Directorio público estándar
drwxr-xr-x 5 alice developers 4096 Aug 16 12:30 public_htmlComún para directorios raíz web. El propietario tiene control total; otros pueden examinar y entrar.
drwx------ (0700) — Directorio privado
drwx------ 3 alice alice 4096 Aug 16 12:30 .sshCompletamente privado. Solo el propietario puede acceder. Requerido para el directorio ~/.ssh.
drwxrwxrwt (1777) — Escribible por todos con sticky bit
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpTodos pueden crear archivos, pero solo el propietario de cada archivo puede eliminar sus propios archivos.
Consejos prácticos para entornos de servidor
Si administras un servidor Linux — ya sea un VPS ejecutando una aplicación web, un servidor de correo asegurado con un Certificado SSL, o una máquina alojando múltiples dominios registrados a través de Registro de Dominios — aquí hay algunas mejores prácticas esenciales de permisos:
- Nunca establezca 777 en archivos o directorios a menos que tengas una razón muy específica y temporal. Los archivos escribibles por todos son un riesgo de seguridad importante.
- Los archivos del servidor web (por ejemplo, bajo
/var/www/) típicamente deberían ser644para archivos y755para directorios, propiedad de tu usuario de aplicación. - Las claves SSH deben ser
600para claves privadas y644para claves públicas. SSH lo aplica estrictamente. - Los archivos de configuración que contienen contraseñas o claves API deben ser
600o640como máximo. - Usa
findpara auditar permisos en un árbol de directorios:
###
