Comprender los Permisos de Archivos Unix con la Calculadora Chmod
Los permisos de archivos Unix controlan quién puede leer, escribir y ejecutar archivos y directorios. Cada archivo y directorio en un sistema Linux o Unix tiene un conjunto de bits de permiso que determinan el acceso para tres categorías: el propietario del archivo, el grupo y los demás. Entender estos permisos es esencial para la administración de sistemas, desarrollo web, DevOps y cualquier trabajo en servidores Linux.
Los Tres Tripletas de Permisos
Los permisos se organizan en tres grupos de tres bits cada uno:
Propietario Grupo Otros
rwx rwx rwx
Cada tripleta contiene tres permisos:
- r — Lectura (4)
- w — Escritura (2)
- x — Ejecución (1)
Los valores entre paréntesis son los pesos octales. Para calcular el modo octal, suma los pesos de los permisos habilitados para cada tripleta.
rwx = 4 + 2 + 1 = 7
rw- = 4 + 2 + 0 = 6
r-x = 4 + 0 + 1 = 5
r-- = 4 + 0 + 0 = 4
-wx = 0 + 2 + 1 = 3
-w- = 0 + 2 + 0 = 2
--x = 0 + 0 + 1 = 1
--- = 0 + 0 + 0 = 0
Modos Chmod Comunes
| Octal | Simbólico | Propietario | Grupo | Otros | Uso Común |
|---|---|---|---|---|---|
| 777 | rwxrwxrwx | rwx | rwx | rwx | Acceso completo (inseguro, evitar) |
| 755 | rwxr-xr-x | rwx | r-x | r-x | Directorios, scripts ejecutables |
| 750 | rwxr-x--- | rwx | r-x | --- | Directorios de equipo |
| 700 | rwx------ | rwx | --- | --- | Ejecutables privados |
| 644 | rw-r--r-- | rw- | r-- | r-- | Archivos regulares, assets web |
| 640 | rw-r----- | rw- | r--- | --- | Archivos legibles por el equipo |
| 600 | rw------- | rw- | --- | --- | Archivos privados (claves SSH) |
| 400 | r-------- | r-- | --- | --- | Configuración de solo lectura |
Permisos de Archivo vs Directorio
El bit de ejecución se comporta de manera diferente para archivos y directorios.
| Permiso | En un Archivo | En un Directorio |
|---|---|---|
| r | Leer contenido del archivo | Listar contenido del directorio (ls) |
| w | Modificar contenido del archivo | Crear, renombrar, eliminar archivos dentro |
| x | Ejecutar archivo como programa | Entrar al directorio (cd), acceder a archivos dentro |
Esta distinción es crítica. Un directorio necesita tanto r como x para ser legible — r solo te permite ver los nombres de archivos, pero sin x no puedes acceder a ningún archivo dentro de él.
# Directorio con r pero sin x — puedes listar pero no acceder
$ ls -la /ejemplo
# (muestra nombres de archivos pero no puedes hacer cd ni leer archivos)
# Directorio con r-x — acceso completo de lectura
$ ls -la /ejemplo
$ cat /ejemplo/archivo.txt
Referencia del Comando Chmod
Notación Octal
chmod 755 script.sh # rwxr-xr-x
chmod 644 index.html # rw-r--r--
chmod 600 id_rsa # rw------- (clave privada SSH)
chmod 700 ~/.ssh # rwx------ (directorio SSH)
chmod -R 755 public/ # Recursivo (aplicar a todos los archivos y subdirectorios)
Notación Simbólica
chmod u+x script.sh # Añadir ejecución para propietario
chmod g+w archivo.txt # Añadir escritura para grupo
chmod o-r archivo.txt # Quitar lectura para otros
chmod a+rx script.sh # Añadir lectura+ejecución para todos (ugo)
chmod u=rwx,g=rx,o= # Establecer permisos exactos: rwxr-x---
chmod -R u=rwX,go=rX public/ # Recursivo, X = ejecución solo para directorios
La X mayúscula en modo simbólico es especial: añade permiso de ejecución solo si el objetivo es un directorio o ya tiene permiso de ejecución para algún usuario. Esto es extremadamente útil para operaciones recursivas.
# Establecer todos los directorios a 755 y todos los archivos a 644 recursivamente
find /ruta -type f -exec chmod 644 {} \;
find /ruta -type d -exec chmod 755 {} \;
# O usar el atajo X
chmod -R u=rwX,go=rX /ruta
Bits de Permiso Especiales
Más allá de los bits rwx básicos, Unix soporta tres permisos especiales.
Setuid (SUID) — u+s (4000)
Cuando se establece en un ejecutable, el proceso se ejecuta con los privilegios del propietario del archivo, no del usuario que lo lanzó. Esto permite a los usuarios ordinarios ejecutar comandos que requieren permisos elevados.
chmod u+s /usr/bin/passwd
# -rwsr-xr-x (la s reemplaza x en la tripleta del propietario)
Setgid (SGID) — g+s (2000)
En un archivo, el proceso se ejecuta con el grupo del archivo. En un directorio, los nuevos archivos creados dentro heredan el grupo del directorio en lugar del grupo primario del creador.
chmod g+s /directorio/compartido
# drwxrwsr-x (la s reemplaza x en la tripleta del grupo)
Sticky Bit — +t (1000)
Usado principalmente en /tmp — solo el propietario del archivo (o root) puede eliminar o renombrar archivos dentro del directorio, incluso si otros tienen permiso de escritura.
chmod +t /tmp
# drwxrwxrwt (la t reemplaza x en la tripleta de otros)
Umask: Permisos Predeterminados
Umask define qué bits de permiso se eliminan cuando se crea un nuevo archivo o directorio. Es el inverso de los permisos predeterminados deseados.
umask 022 # Predeterminado en la mayoría de sistemas
# Archivos: 666 - 022 = 644 (rw-r--r--)
# Directorios: 777 - 022 = 755 (rwxr-xr-x)
umask 002 # Predeterminado para directorios compartidos
# Archivos: 666 - 002 = 664 (rw-rw-r--)
# Directorios: 777 - 002 = 775 (rwxrwxr-x)
umask 077 # Restrictivo (privado)
# Archivos: 666 - 077 = 600 (rw-------)
# Directorios: 777 - 077 = 700 (rwx------)
Mejores Prácticas de Seguridad
- Archivos de configuración con secretos: 600 (
chmod 600 .env) - Claves privadas SSH: 600 (
chmod 600 ~/.ssh/id_rsa) - Directorio SSH: 700 (
chmod 700 ~/.ssh) - Directorios web: 755 (
chmod 755 /var/www/html) - Archivos web: 644 (
chmod 644 /var/www/html/index.html) - Directorios de subida: 755, no 777
- Scripts ejecutables: 755 (
chmod 755 deploy.sh) - Nunca uses 777 en producción — permite que cualquier usuario modifique archivos
Errores Comunes
Error 1: Confundir permisos de directorio y archivo
# ❌ Incorrecto — dar ejecución a todos los archivos recursivamente
chmod -R 755 /ruta
# ✅ Correcto — separar permisos de archivo y directorio
find /ruta -type f -exec chmod 644 {} \;
find /ruta -type d -exec chmod 755 {} \;
Error 2: Usar 777 para subidas web
# ❌ Incorrecto — cualquier usuario puede escribir
chmod 777 uploads/
# ✅ Correcto — el propietario puede escribir, otros solo lectura+ejecución
chmod 755 uploads/
# Hacer que el usuario del servidor web sea el propietario
chown www-data:www-data uploads/
Error 3: Ignorar permisos de grupo para proyectos en equipo
# Establecer el bit de grupo sticky para que los nuevos archivos hereden el grupo
chmod g+s /proyecto/compartido
chmod 775 /proyecto/compartido
Herramienta en Línea
La herramienta Calculadora CHMOD en Help2Code proporciona un interactivo alternador de bits de permiso con salida octal y simbólica instantánea. Alterna lectura, escritura y ejecución para propietario, grupo y otros, y ve el comando chmod resultante inmediatamente. Los valores predefinidos rápidos para modos comunes como 755, 644, 600 y 700 facilitan encontrar el conjunto de permisos correcto sin memorizar valores octales.
Conclusión
Los permisos de archivos Unix son un sistema simple pero poderoso construido sobre tres tripletas de bits de lectura, escritura y ejecución. La notación octal hace que los permisos sean compactos y programables, mientras que la notación simbólica proporciona control detallado. Entender los permisos — incluyendo umask, SUID, SGID y el sticky bit — es esencial para la administración segura de servidores. Usa la herramienta Calculadora CHMOD para experimentar con combinaciones de permisos de forma interactiva.