¿Qué significa chmod 755? (y cómo leer cualquier permiso)
Los dígitos de chmod 755 no son magia: codifican quién puede leer, escribir y ejecutar. Aprende a leer 755, 644 y 700 de un vistazo, y por qué ejecutar significa otra cosa en un directorio.
Encontraste la solución en Stack Overflow —chmod 755 deploy.sh— y funcionó. Pero 755 son tres dígitos sin significado evidente, así que la próxima vez que un script no arranque o un servidor web devuelva un 403, vuelves a copiar números y cruzar los dedos. La buena noticia: esos dígitos no son un conjuro. Son un código compacto que puedes leer de un vistazo, y en cuanto sabes hacerlo, 755, 644 y 700 dejan de ser algo que pegas y pasan a ser decisiones que tomas.
Tres clases, tres permisos
Cada archivo y directorio de un sistema Unix lleva permisos para tres clases de usuario:
- propietario (
u): normalmente quien lo creó - grupo (
g): un conjunto de usuarios que comparten el acceso - otros (
o): todos los demás
Para cada clase, tres permisos se activan o desactivan de forma independiente:
- lectura (
r): ver el contenido - escritura (
w): cambiar el contenido - ejecución (
x): ejecutarlo como programa (en un directorio esto significa otra cosa; guarda esa idea)
Ejecuta ls -l y lo ves todo a la vez:
-rwxr-xr-x 1 alice devs 482 Jul 29 09:14 deploy.sh
Ese -rwxr-xr-x es el conjunto de permisos completo. Léelo en tres grupos de tres, después del primer carácter:
- el
-inicial es el tipo de archivo, no un permiso (-archivo normal,ddirectorio,lenlace simbólico); es un error de lectura habitual rwx: el propietario puede leer, escribir y ejecutarr-x: el grupo puede leer y ejecutar, pero no escribirr-x: otros reciben lo mismo: leer y ejecutar, sin escritura
Un guion significa que ese permiso está desactivado. Así que -rwxr-xr-x es justo lo que produce chmod 755 en un archivo normal; los mismos permisos en un directorio se leerían drwxr-xr-x, con una d en ese primer hueco en vez del -. Veamos por qué.
Cada dígito es una suma: 4, 2, 1
Los tres dígitos de 755 corresponden a las tres clases, en orden: propietario, grupo, otros. Cada dígito codifica los tres permisos de esa clase sumando valores fijos:
| Permiso | Valor |
|---|---|
lectura (r) | 4 |
escritura (w) | 2 |
ejecución (x) | 1 |
Suma los valores de los permisos que quieres activos y obtienes un dígito del 0 al 7:
| Dígito | Suma | Permisos |
|---|---|---|
| 7 | 4 + 2 + 1 | rwx |
| 6 | 4 + 2 | rw- |
| 5 | 4 + 1 | r-x |
| 4 | 4 | r-- |
| 0 | — | --- |
Así, 755 se lee de izquierda a derecha como:
- 7 → propietario: 4 + 2 + 1 =
rwx - 5 → grupo: 4 + 1 =
r-x - 5 → otros: 4 + 1 =
r-x
El propietario puede hacerlo todo; grupo y otros pueden leer y ejecutar, pero no modificar. Eso es chmod 755. Y 644:
- 6 → propietario: 4 + 2 =
rw- - 4 → grupo:
r-- - 4 → otros:
r--
El propietario puede leer y escribir; el resto solo leer. Nada tiene ejecución, justo lo correcto para un archivo de datos normal y justo lo incorrecto para un script que necesitas ejecutar.
No hace falta memorizar las combinaciones. Marca las casillas de lectura, escritura y ejecución de cada clase en la calculadora chmod y el octal y la cadena rwxr-xr-x cambian a la vez, hasta que la correspondencia se te queda en los dedos.
Los modos que verás de verdad
Un puñado de números cubre casi todos los casos reales. Esto es lo que significan y dónde aparecen; y si la duda es cuál darle a un archivo concreto, o cómo aplicar el reparto a un proyecto entero, chmod 644 vs 755 desmenuza esa decisión:
| Octal | Simbólico | Uso típico |
|---|---|---|
644 | rw-r--r-- | Archivos normales: documentos, configuración, código fuente |
755 | rwxr-xr-x | Directorios, y scripts o binarios que cualquiera puede ejecutar |
700 | rwx------ | Un directorio o script privado: solo el propietario |
600 | rw------- | Archivos privados: una clave SSH privada debería ser esto |
750 | rwxr-x--- | Propietario completo, el grupo puede usarlo, otros fuera |
775 | rwxrwxr-x | El grupo también puede escribir: un directorio de proyecto compartido |
Dos patrones explican casi toda la tabla. Los archivos de datos llevan 644 (o 600 si son privados): lectura y escritura para el propietario, solo lectura o nada para el resto, sin ejecución. Lo que se recorre o se ejecuta —directorios y programas— lleva 755 (o 750/700 para restringir): la misma idea que 644 más el bit de ejecución, porque sin él no pueden hacer aquello para lo que existen. Lo cual lleva a la pregunta que la mayoría de los tutoriales se salta.
Ejecutar significa otra cosa en un directorio
En un archivo, x es claro: permiso para ejecutarlo como programa. En un directorio, x no tiene nada que ver con ejecutar nada, y aquí es donde el 755 de una carpeta por fin cobra sentido.
En un directorio:
rte deja listar los nombres que contiene (ls)xte deja recorrerlo: entrar concd, atravesarlo y llegar a un archivo por un nombre que ya conocesw—pero solo junto conx— te deja crear, renombrar y borrar entradas
Lo sorprendente es lo independientes que son r y x. Un directorio con r pero sin x te deja ver los nombres, pero no leer los archivos ni siquiera hacerles stat. Un directorio con x pero sin r te deja abrir un archivo dentro si ya sabes su nombre exacto, pero ls falla. Y cambiar lo que hay en un directorio —crear o borrar un archivo— necesita w y x en ese directorio, no en los archivos. En la práctica quieres r y x juntos, y por eso los directorios que otros necesitan atravesar suelen ser 755 y no 644: quita los bits de ejecución y nadie entra en la carpeta.
Hay otro efecto en cadena que suele sorprender al principio: para llegar a /var/www/site/index.html necesitas x en cada directorio de la ruta: /, /var, /var/www y /var/www/site. Un solo ancestro sin su bit de ejecución bloquea el acceso a todo lo que hay debajo, por muy abierto que esté el archivo. Puedes inspeccionar toda la cadena de una vez con ls -ld / /var /var/www /var/www/site y buscar la línea a la que le falte la x. Es una causa frecuente de un «permiso denegado» que no logras explicar mirando solo el archivo; un modo que parece correcto pero aun así se rechaza merece su propia ronda de diagnóstico, que es justo lo que recorre «permission denied» incluso después de chmod.
Notación simbólica: la otra forma de decirlo
El octal fija los nueve bits de golpe. La notación simbólica cambia solo algunos y se lee más como una frase:
chmod +x deploy.sh # añade ejecución: hazlo ejecutable (pero mira la nota sobre umask)
chmod u+x deploy.sh # añade ejecución solo al propietario, sin tocar el resto
chmod go-w file # quita escritura a grupo y otros
chmod u=rw,go=r file # fija exactamente: propietario rw, grupo y otros r (= 644)
Las piezas son un quién (u propietario, g grupo, o otros, a todos), un operador (+ añadir, - quitar, = fijar exactamente) y los permisos (r, w, x). Un matiz: cuando omites el quién, como en un simple chmod +x, apunta a las tres clases, pero tu umask lo filtra, así que puede que no active todos los bits de ejecución. Nombra la clase —u+x, a+x— cuando quieras estar seguro. Usa octal cuando quieras fijar el modo completo desde cero; usa simbólico cuando quieras mover un solo bit sin tocar los demás. La calculadora va en ambos sentidos: escribe una cadena simbólica y lee el octal, o arma el octal y lee el simbólico. Convierte los bits de permiso y no puede ver el umask de tu equipo, así que dale a un +x a secas un quién explícito —u+x, a+x— cuando quieras que la herramienta coincida con el comando que vas a ejecutar.
Leer permisos entre sistemas
Fijar un modo funciona igual en Linux, macOS y los BSD. Eso sí, no leas los dos comandos de arriba como intercambiables: chmod 755 fija el modo básico completo de una vez, mientras que chmod u+x cambia solo el bit de ejecución del propietario y deja el resto como estaba. Los comandos para consultar el modo actual sí varían entre sistemas:
ls -limprime la forma-rwxr-xr-xen todas partes; de nuevo, el primer carácter es el tipo de archivo, no un permiso.- Para obtener el octal directamente: en GNU/Linux,
stat -c '%a' file; en macOS/BSD,stat -f '%Lp' file. (stat -c '%A'en Linux imprime la forma simbólica.) - Windows usa un modelo distinto por completo: NTFS se basa en ACL, no en los bits de modo de Unix, así que las herramientas nativas de Windows no actúan sobre un
755. Bajo WSL, los archivos del sistema de archivos Linux se comportan con normalidad, pero en una unidad de Windows montada (/mnt/c) el resultado depende de las opciones de metadatos de DrvFS y de las ACL de Windows subyacentes: ahíchmodno equivale necesariamente alchmodde un sistema de archivos Linux nativo, y un modo que se muestra como777sigue sin poder saltarse la ACL.
Lo que 755 no te dice
Tres cosas quedan justo fuera de esos tres dígitos, y cada una es una fuente habitual de confusión:
-
Un cuarto dígito, a la izquierda.
755es en realidad0755. Ese0inicial es un hueco para los bits especiales, y se descifran igual que los demás:Dígito Bit Ejemplo 4setuid: ejecuta el programa como el propietario del archivo 4755en un ejecutable2setgid: ejecuta como el grupo del archivo; en un directorio, las entradas nuevas heredan su grupo 2775en un directorio compartido1sticky: en un directorio compartido, una entrada solo puede renombrarla o borrarla su propietario, el del directorio o root 1777en/tmpDescifrarlos es así de fácil. Lo que hacen en tiempo de ejecución —y cómo te sorprenden— es un artículo aparte.
-
La propiedad. Los permisos deciden lo que propietario, grupo y otros pueden hacer, pero
chmodnunca cambia quién es el propietario ni el grupo. De eso se encargachown, y confundir ambos está detrás de mucho «lo puse en777y sigue sin funcionar». -
Otros guardianes completamente distintos. El modo es solo la primera comprobación. Una ACL, una política de SELinux o AppArmor, un montaje de solo lectura o con
noexec, o unaxque falta en un directorio padre pueden denegar el acceso a un archivo cuyo propio modo parece de par en par. Por esochmod 777a veces no cambia nada, y por eso «cualquier permiso» aquí significa leer el modo, no todas las capas que protegen un archivo. Desenredar esas capas es otra ronda de diagnóstico.
Una lista para leer permisos
Cuando un modo aparezca ante ti:
- Divídelo en tres dígitos: propietario, grupo, otros, en ese orden.
- Descompón cada dígito con 4 (
r) + 2 (w) + 1 (x).7esrwx,6esrw-,5esr-x,4esr--. - Recuerda qué significa ejecutar en el objetivo. En un archivo es «ejecútame»; en un directorio es «entra y llega a lo que hay dentro».
- Comprueba si hay un cuarto dígito. Un
1,2o4inicial es un bit especial —sticky, setgid o setuid—; se descifra igual, pero su comportamiento en ejecución es otra historia. - Separa permiso de propiedad. El modo define lo que pueden hacer propietario, grupo y otros;
chowncambia el propietario y el grupo del archivo, y qué clase se aplica depende de la identidad y la pertenencia a grupos de quien accede.
Haz eso y 644, 755 y 700 se leen de un vistazo. Y cuando prefieras confirmar antes que descifrar —o ver un modo y su cadena rwxr-xr-x lado a lado— pégalo en la calculadora chmod: octal dentro, simbólico fuera, en ambos sentidos, y con el significado de archivo frente a directorio explicado.