DevKitLab Logo DevKitLab
chmod / Unix / Permisos de archivos / Linux

¿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, d directorio, l enlace simbólico); es un error de lectura habitual
  • rwx: el propietario puede leer, escribir y ejecutar
  • r-x: el grupo puede leer y ejecutar, pero no escribir
  • r-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:

PermisoValor
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ígitoSumaPermisos
74 + 2 + 1rwx
64 + 2rw-
54 + 1r-x
44r--
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:

OctalSimbólicoUso típico
644rw-r--r--Archivos normales: documentos, configuración, código fuente
755rwxr-xr-xDirectorios, y scripts o binarios que cualquiera puede ejecutar
700rwx------Un directorio o script privado: solo el propietario
600rw-------Archivos privados: una clave SSH privada debería ser esto
750rwxr-x---Propietario completo, el grupo puede usarlo, otros fuera
775rwxrwxr-xEl 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:

  • r te deja listar los nombres que contiene (ls)
  • x te deja recorrerlo: entrar con cd, atravesarlo y llegar a un archivo por un nombre que ya conoces
  • w —pero solo junto con x— 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 -l imprime la forma -rwxr-xr-x en 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í chmod no equivale necesariamente al chmod de un sistema de archivos Linux nativo, y un modo que se muestra como 777 sigue 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:

  1. Un cuarto dígito, a la izquierda. 755 es en realidad 0755. Ese 0 inicial es un hueco para los bits especiales, y se descifran igual que los demás:

    DígitoBitEjemplo
    4setuid: ejecuta el programa como el propietario del archivo4755 en un ejecutable
    2setgid: ejecuta como el grupo del archivo; en un directorio, las entradas nuevas heredan su grupo2775 en un directorio compartido
    1sticky: en un directorio compartido, una entrada solo puede renombrarla o borrarla su propietario, el del directorio o root1777 en /tmp

    Descifrarlos es así de fácil. Lo que hacen en tiempo de ejecución —y cómo te sorprenden— es un artículo aparte.

  2. La propiedad. Los permisos deciden lo que propietario, grupo y otros pueden hacer, pero chmod nunca cambia quién es el propietario ni el grupo. De eso se encarga chown, y confundir ambos está detrás de mucho «lo puse en 777 y sigue sin funcionar».

  3. 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 una x que falta en un directorio padre pueden denegar el acceso a un archivo cuyo propio modo parece de par en par. Por eso chmod 777 a 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:

  1. Divídelo en tres dígitos: propietario, grupo, otros, en ese orden.
  2. Descompón cada dígito con 4 (r) + 2 (w) + 1 (x). 7 es rwx, 6 es rw-, 5 es r-x, 4 es r--.
  3. 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».
  4. Comprueba si hay un cuarto dígito. Un 1, 2 o 4 inicial es un bit especial —sticky, setgid o setuid—; se descifra igual, pero su comportamiento en ejecución es otra historia.
  5. Separa permiso de propiedad. El modo define lo que pueden hacer propietario, grupo y otros; chown cambia 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.