Permisos en Linux: chmod, chown y umask explicados con ejemplos
Los permisos en Linux son uno de los conceptos más importantes para cualquier administrador de sistemas. Controlan quién puede leer, escribir o ejecutar cada archivo y directorio. En este tutorial aprenderás a dominar chmod, chown y umask con ejemplos prácticos.
Cómo funcionan los permisos en Linux
En Linux, cada archivo y directorio tiene tres tipos de permisos asignados a tres grupos de usuarios:
- Owner (propietario): el usuario que creó el archivo
- Group (grupo): usuarios que pertenecen al mismo grupo
- Others (otros): el resto de usuarios del sistema
Y tres tipos de permisos:
- r (read): permiso de lectura — valor numérico 4
- w (write): permiso de escritura — valor numérico 2
- x (execute): permiso de ejecución — valor numérico 1
Leer los permisos con ls -l
$ ls -l archivo.txt
-rwxr-xr-- 1 victor devops 1234 may 7 10:00 archivo.txt
Desglosando la salida:
| Posición | Valor | Significado |
|---|---|---|
| 1 | – | Tipo: archivo normal (d = directorio, l = enlace) |
| 2-4 | rwx | Permisos del propietario: lectura, escritura y ejecución |
| 5-7 | r-x | Permisos del grupo: lectura y ejecución |
| 8-10 | r– | Permisos de otros: solo lectura |
| 11 | victor | Usuario propietario |
| 12 | devops | Grupo propietario |
El comando chmod: cambiar permisos
chmod (change mode) permite modificar los permisos de archivos y directorios. Tiene dos modos de uso: simbólico y numérico (octal).
Modo simbólico
# Añadir permiso de ejecución al propietario
chmod u+x script.sh
# Quitar permiso de escritura al grupo
chmod g-w archivo.txt
# Dar lectura y escritura a todos
chmod a+rw archivo.txt
# Quitar todos los permisos a otros
chmod o-rwx archivo.txt
# Múltiples cambios a la vez
chmod u+x,g-w,o-r archivo.txt
Las letras que puedes usar:
- u: user (propietario)
- g: group (grupo)
- o: others (otros)
- a: all (todos)
Modo numérico (octal)
El modo numérico es el más utilizado en la práctica. Cada permiso tiene un valor: r=4, w=2, x=1. Se suman para obtener el valor de cada grupo.
| Valor octal | Permisos | Descripción |
|---|---|---|
| 7 | rwx | Lectura, escritura y ejecución |
| 6 | rw- | Lectura y escritura |
| 5 | r-x | Lectura y ejecución |
| 4 | r– | Solo lectura |
| 0 | — | Sin permisos |
# Propietario: rwx | Grupo: r-x | Otros: r--
chmod 754 script.sh
# Permisos típicos para scripts
chmod 755 script.sh
# Permisos típicos para archivos de configuración
chmod 644 config.conf
# Solo el propietario puede leer y escribir
chmod 600 clave-privada.pem
# Aplicar permisos recursivamente a un directorio
chmod -R 755 /var/www/html/
El comando chown: cambiar propietario
chown (change owner) permite cambiar el usuario y/o grupo propietario de un archivo o directorio.
# Cambiar propietario
chown victor archivo.txt
# Cambiar propietario y grupo
chown victor:devops archivo.txt
# Cambiar solo el grupo
chown :devops archivo.txt
# Cambiar propietario recursivamente
chown -R victor:devops /var/www/html/
# Ver el resultado
ls -l archivo.txt
Caso práctico: despliegue web
Un caso muy común en servidores web: asignar correctamente los permisos para que Nginx o Apache puedan leer los archivos pero no modificarlos.
# Asignar los archivos al usuario www-data (Nginx/Apache)
chown -R www-data:www-data /var/www/html/
# Directorios: rwxr-xr-x (755)
find /var/www/html -type d -exec chmod 755 {} ;
# Archivos: rw-r--r-- (644)
find /var/www/html -type f -exec chmod 644 {} ;
El comando umask: permisos por defecto
umask define qué permisos se eliminan por defecto al crear nuevos archivos y directorios. Es como un filtro que se aplica automáticamente.
# Ver el umask actual
umask
# Salida típica: 0022
Con umask 022:
- Archivos nuevos: 666 – 022 = 644 (rw-r–r–)
- Directorios nuevos: 777 – 022 = 755 (rwxr-xr-x)
# Cambiar umask temporalmente (solo para la sesión actual)
umask 027
# Con umask 027:
# Archivos: 666 - 027 = 640 (rw-r-----)
# Directorios: 777 - 027 = 750 (rwxr-x---)
# Cambiar umask permanentemente (añadir a ~/.bashrc o /etc/profile)
echo "umask 027" >> ~/.bashrc
Permisos especiales: SUID, SGID y Sticky Bit
Además de los permisos básicos, Linux tiene tres permisos especiales muy utilizados en entornos de producción:
SUID (Set User ID) — valor 4
Permite ejecutar un archivo con los permisos del propietario, no del usuario que lo ejecuta. Muy usado en comandos del sistema como passwd.
chmod u+s script.sh
# o en octal:
chmod 4755 script.sh
# Verificar: aparece 's' en lugar de 'x'
ls -l script.sh
# -rwsr-xr-x
SGID (Set Group ID) — valor 2
En directorios, hace que los nuevos archivos hereden el grupo del directorio padre en lugar del grupo del usuario creador. Ideal para directorios compartidos entre equipos.
chmod g+s /shared/proyecto/
# o en octal:
chmod 2755 /shared/proyecto/
Sticky Bit — valor 1
En directorios, impide que los usuarios borren archivos de otros. El ejemplo clásico es /tmp.
chmod +t /tmp/compartido/
# o en octal:
chmod 1777 /tmp/compartido/
# Verificar: aparece 't' al final
ls -ld /tmp/
# drwxrwxrwt
Resumen: tabla de permisos más usados
| Octal | Permisos | Uso típico |
|---|---|---|
| 777 | rwxrwxrwx | ⚠️ Evitar en producción |
| 755 | rwxr-xr-x | Scripts, directorios web |
| 644 | rw-r–r– | Archivos web, configuración |
| 600 | rw——- | Claves privadas SSH |
| 400 | r——– | Archivos solo lectura críticos |
| 1777 | rwxrwxrwt | Directorios temporales compartidos |
Conclusión
Dominar los permisos en Linux es fundamental para mantener un sistema seguro. Recuerda la regla de oro: aplica siempre el mínimo privilegio necesario. No uses 777 en producción y asegúrate de que las claves privadas tienen permisos 600.
En el próximo post veremos cómo automatizar tareas con cron jobs, otro pilar esencial para cualquier sysadmin. ¿Tienes dudas sobre permisos? Déjalas en los comentarios.
