piapia123
es

Permisos de archivos en Linux

Web

Todo se ejecuta en tu navegador: no se sube nada

Entrada
Arrastra un archivo aquí para cargarlo
Resultado

Cambiar permisos es el trabajo de cada día, y las tres notaciones tienen su sitio a la vez que resultan ilegibles entre sí: `755` es lo que va en un archivo de configuración o en un Dockerfile, `u+x,g-w,o=r` es lo que se teclea en el `chmod` de la línea de comandos, y `drwxr-xr-x` es lo que imprime `ls -l` y lo que alguien te manda en una captura. Aquí se traducen entre sí y se explica cada bit. Los tres bits especiales (el dígito inicial en octal) tienen su propia explicación y solo aparecen cuando están puestos de verdad: `4` setuid, `2` setgid y `1` sticky. En `ls -l` ocupan la posición de ejecución, de ahí que existan `s` y `S` — y `S` significa «bit especial puesto pero sin permiso de ejecución», que en un sistema real es casi siempre un error. Esta herramienta lo señala aparte.

Funciones

  • Las tres notaciones, convertidas entre sí: octal (755 / 0755 / 0o755), simbólica (u+x,g-w,o=r) y la cadena de ls -l (-rwxr-xr-x / drwxr-xr-x)
  • Cada bit explicado: qué puede leer, escribir o ejecutar el propietario, el grupo y los demás
  • Los tres bits especiales explicados: setuid, setgid (en un directorio, herencia de grupo) y sticky (en un directorio, solo el propietario puede borrar)
  • ⚠️ Una S o una T mayúscula se avisa por separado: significa que el bit especial está puesto pero el archivo no es ejecutable, lo que casi siempre es un error
  • Permisos por defecto de los archivos nuevos (666 & ~umask) y directorios nuevos (777 & ~umask) deducidos del umask
  • También da un comando chmod listo para pegar; si la entrada ya es un comando entero, se conservan sus rutas y opciones como -R
  • Cuando una forma simbólica omite el «quién» (solo +x), parte del permiso de partida que fijes en vez de adivinar tu umask
  • Admite asignaciones que copian de otra clase, como `g=u`: `=` limpia antes de poner, y las cláusulas se aplican de izquierda a derecha dentro de un mismo comando (`u=x,g=u` y `g=u,u=x` difieren)
  • ⚠️ Si la entrada no se reconoce, el error señala el carácter exacto (cuál, qué es, el texto de alrededor), no un vago «formato incorrecto»

Cómo se usa

  1. Pega el permiso: octal, simbólico o la cadena de ls -l, los tres sirven
  2. Ajusta el permiso de partida (para la forma simbólica que omite el «quién») y el umask si quieres
  3. El resultado da las otras dos notaciones, la explicación bit a bit y el comando chmod

Preguntas frecuentes

¿Es distinto 755 de 0755?
No. El `0` inicial solo marca el literal como octal (en C y en el shell, para que no se lea como decimal o hexadecimal). Aquí todo se imprime con cuatro dígitos para que las dos formas no parezcan distintas. Pero un `77` de dos dígitos se rechaza: podría ser un `077` mal escrito o un `0077`, y esos difieren en dos clases de permiso enteras: una conjetura abriría un agujero que no se ve.
¿Qué diferencia hay entre rwxr-xr-x y -rwxr-xr-x?
El primero son los nueve caracteres de permiso; el segundo añade el carácter de tipo inicial, donde `-` es un archivo normal, `d` un directorio y `l` un enlace simbólico. El tipo no interviene en la aritmética de permisos, pero sí cambia cómo se lee el bit sticky, así que se aceptan las dos formas y la `d` se conserva en la salida.
¿No es setgid para ejecutables?
En un archivo significa ejecutarse con el grupo del archivo. ⚠️ En un directorio significa otra cosa: lo que se cree dentro hereda el grupo del directorio y no el grupo principal de quien lo crea. Ese segundo comportamiento es lo que hace funcionar los directorios compartidos, y es el que se olvida.
¿Por qué mi archivo nuevo no es 644?
Los archivos nuevos parten de `666 & ~umask` y los directorios nuevos de `777 & ~umask`. Los archivos parten de 666 porque un archivo normal recién creado no debería ser ejecutable por defecto; los directorios parten de 777 porque un directorio sin permiso de ejecución es un directorio al que no se puede entrar. Así, con umask 022 salen 644 y 755, y con umask 077 salen 600 y 700.
¿Qué es la u de u+x y qué pasa si la omito?
`u` es el propietario del archivo, `g` su grupo, `o` los demás y `a` los tres. Cuando se omite el «quién» (solo `+x`), el `chmod` real lo aplica según tu umask, que es estado del proceso y no un valor fijo. Por eso esta herramienta no lo adivina: usa el permiso de partida que fijes arriba y lo dice.
¿Qué diferencia hay entre X y x?
`x` pone el bit de ejecución sin condiciones; `X` solo lo pone cuando el destino es un directorio o algo que ya tiene un bit de ejecución. `chmod -R a+X` es la forma habitual: dejar entrar en los directorios sin volver ejecutables todos los archivos de dentro. Esta herramienta no puede saber si el destino es un directorio, así que usa la segunda condición.
¿Qué significa `g=u`?
El lado derecho de un operador puede ser una clase (`u`/`g`/`o`), lo que significa copiar los permisos de otra clase: `g=u` copia los bits rwx del propietario al grupo, y combinaciones como `u=g,o=g` también valen. ⚠️ Dos cosas se equivocan con facilidad: ① `=` limpia antes de poner, así que los bits que el grupo tenga y el propietario no se quitan en vez de sumarse con OR; ② las cláusulas se aplican de izquierda a derecha dentro de un mismo comando y la clase de origen se lee tal como está en ese punto, así que `u=x,g=u` (g ve la u nueva) difiere de `g=u,u=x` (g ve la u antigua). Los bits especiales no se copian.

Herramientas relacionadas