
Ejecutas un script y el sistema te responde Permission denied. Intentas acceder a un directorio y no puedes. Modificas un archivo de configuración y el servidor no puede leerlo. Los permisos en Linux están detrás de la mayoría de estos errores, y entender cómo funcionan es una de las habilidades más prácticas que puedes tener como desarrollador o administrador de sistemas.
El modelo de permisos de Linux

Cada archivo y directorio en Linux tiene asociados tres bloques de permisos: uno para el propietario (owner), uno para el grupo (group) y uno para el resto del mundo (others). Cada bloque tiene tres bits: lectura (r), escritura (w) y ejecución (x).
Cuando ejecutas ls -la verás algo como:
-rwxr-xr-- 1 yassin devs 4096 Jun 13 deploy.sh
drwxr-x--- 2 yassin devs 4096 Jun 13 configs/
El primer carácter indica el tipo: - para archivo regular, d para directorio, l para enlace simbólico. Los nueve siguientes son los tres bloques de permisos: rwx para el propietario, r-x para el grupo, r-- para el resto.
Una diferencia clave entre archivos y directorios: el bit x en un archivo significa que puedes ejecutarlo como programa; en un directorio significa que puedes entrar en él con cd. Puedes tener r en un directorio (listar su contenido con ls) pero sin x no puedes acceder a los archivos dentro.
Cambiar permisos con chmod

chmod tiene dos formas de uso: numérica y simbólica.
En el modo numérico, cada permiso tiene un valor: r=4, w=2, x=1. Los sumas para cada bloque. chmod 755 significa rwx para el propietario (7=4+2+1), r-x para el grupo (5=4+0+1) y r-x para el resto (5=4+0+1).
chmod 755 script.sh # rwxr-xr-x — estándar para scripts ejecutables
chmod 644 config.yml # rw-r--r-- — archivos de configuración legibles por todos
chmod 600 .env # rw------- — solo el propietario puede leer (secretos)
chmod 700 privado/ # rwx------ — directorio solo para el propietario
chmod -R 755 public/ # aplica recursivamente a todo el árbol
En el modo simbólico usas letras: u (user/propietario), g (group), o (others), a (all). Con + añades, con - quitas, con = estableces exactamente.
chmod u+x script.sh # añadir ejecución al propietario
chmod go-w archivo.txt # quitar escritura a grupo y otros
chmod a+r documento.txt # dar lectura a todos
chmod u+x,o-r secreto.sh # combinar varias operaciones
Cambiar propietario con chown
chown yassin archivo.txt # solo cambia el propietario
chown yassin:devs archivo.txt # cambia propietario y grupo
chown :devs archivo.txt # solo cambia el grupo
chown -R www-data:www-data /var/www # recursivo para el servidor web
Cambiar el propietario de un archivo que no te pertenece requiere sudo. Cambiar los permisos de un archivo que sí es tuyo no lo requiere.
Casos habituales
- Script de despliegue:
chmod 700 deploy.sh— solo el propietario puede ejecutarlo, nadie más puede leerlo ni modificarlo. - Archivos de configuración del servidor web:
chmod 644y propietariowww-data— el servidor puede leerlos, nadie puede escribirlos salvo el administrador. - Claves SSH:
chmod 600 ~/.ssh/id_ed25519— SSH rechaza conectar si la clave privada tiene permisos más abiertos. - Archivo .env con secretos:
chmod 600 .env— solo el propietario puede leerlo. Nuncachmod 644en archivos con contraseñas o tokens.
Los permisos son una de las piezas del rompecabezas de la seguridad en Linux. Otra pieza igual de fundamental son los procesos: entender qué está ejecutándose en un sistema, cómo controlarlo y cómo gestionar los servicios que arrancan automáticamente.