Cómo funcionan los permisos Unix
Cada archivo tiene tres conjuntos de tres bits de permiso: para el propietario del archivo, para su grupo y para todos los demás. Cada conjunto puede permitir lectura (r, valor 4), escritura (w, 2) y ejecución (x, 1). Suma los valores de cada conjunto y obtienes un dígito octal, por eso los permisos se escriben con tres dígitos: rwxr-xr-x es 4+2+1, 4+1, 4+1 = 755.
En los directorios los mismos bits significan algo ligeramente distinto: lectura lista las entradas, escritura crea y borra entradas, y ejecución permite entrar en el directorio y llegar a los archivos de dentro. Un directorio sin x es inutilizable incluso con r.
Los bits especiales
Un cuarto dígito inicial contiene tres bits más. setuid (4) hace que un ejecutable se ejecute como su propietario, que es como passwd puede editar un archivo de root. setgid (2) hace lo mismo con el grupo, y en un directorio hace que los archivos nuevos hereden el grupo del directorio, que es lo que quieren las carpetas de proyecto compartidas. sticky (1) en un directorio impide que los usuarios borren los archivos de los demás; /tmp es 1777.
Modo simbólico
chmod también acepta cambios en lugar de valores absolutos: u+x añade ejecución para el propietario, go-w quita escritura a grupo y otros, a=r pone a todos en solo lectura. X (mayúscula) añade ejecución solo a directorios y a archivos que ya la tienen en algún sitio, lo que convierte a chmod -R a+rX en la forma segura de abrir un árbol para lectura.
umask
Los archivos nuevos empiezan en 666 y los directorios en 777, menos la umask. La umask habitual 022 da 644 y 755; 077 da 600 y 700 (privado). umask sin argumento muestra el valor actual.
Valores habituales
| Octal | Simbólico | Uso |
|---|---|---|
| 644 | rw-r--r-- | Archivos normales, contenido web |
| 755 | rwxr-xr-x | Ejecutables, scripts, directorios |
| 600 | rw------- | Claves privadas, .env, archivos de contraseñas |
| 700 | rwx------ | ~/.ssh y otros directorios privados |
| 664 / 775 | rw-rw-r-- / rwxrwxr-x | Archivos / directorios de colaboración en grupo |
| 2775 | rwxrwsr-x | Directorio compartido con herencia de grupo |
| 1777 | rwxrwxrwt | /tmp |
| 4755 | rwsr-xr-x | Programas setuid como passwd, sudo |
Preguntas
¿Qué significa chmod 755?
El propietario puede leer, escribir y ejecutar; el grupo y otros pueden leer y ejecutar. Es el modo normal para programas, scripts y directorios.
¿Qué hace chmod 777 y por qué es malo?
Permite a cualquier usuario del sistema leer, escribir y ejecutar el archivo. En una máquina compartida o expuesta a internet eso significa que cualquiera, incluido un servicio comprometido, puede modificarlo. Casi nunca es la solución correcta a un error de permisos; normalmente lo es la propiedad (chown) o un 755/644.
¿Por qué mi script dice «permission denied»?
Le falta el bit de ejecución. Ejecuta chmod +x script.sh (o 755). Si está en un sistema de archivos montado con noexec, o la línea shebang apunta a un intérprete inexistente, obtienes el mismo mensaje.
¿Qué significa la s o la t en ls -l?
Una s minúscula en la posición de ejecución del propietario o del grupo significa que setuid o setgid está activo junto con la ejecución; una S mayúscula significa que el bit especial está activo sin ejecución (normalmente un error). t y T son lo mismo para el sticky bit. Pega la cadena en el campo simbólico para decodificarla.
¿Cuál es la diferencia entre chmod y chown?
chmod cambia los bits de permiso; chown cambia qué usuario y grupo poseen el archivo. Muchos problemas de «permission denied» son problemas de propiedad: los bits están bien pero para el usuario equivocado.
¿Cómo fijo permisos de forma recursiva?
chmod -R. Para no hacer ejecutable cada archivo, usa chmod -R u=rwX,go=rX dir, donde la X mayúscula aplica ejecución solo a directorios y archivos ya ejecutables.