Calculadora chmod
Convierte permisos de archivos Unix entre octal (755), simbólico (rwxr-xr-x) y una cuadrícula de casillas, con setuid, setgid y el bit sticky.
| Clase | Lectura | Escritura | Ejecución |
|---|---|---|---|
| Propietario | |||
| Grupo | |||
| Otros |
chmod 644 filechmod u=rw,g=r,o=r file-rw-r--r--Qué hace esta herramienta
Cada archivo de un sistema Unix lleva un conjunto de permisos que deciden quién puede leerlo, modificarlo o ejecutarlo. El comando chmod los establece y acepta esos permisos en dos grafías bastante distintas —un número octal de tres dígitos y una cadena de letras— que describen exactamente lo mismo. Esta herramienta mantiene sincronizadas ambas grafías, y además una cuadrícula de casillas, para que puedas partir de la que tengas y copiar la que necesites.
Todo se ejecuta en tu navegador y es aritmética pura: no hay servidor y nada de lo que escribes se envía a ninguna parte. Es una calculadora y una referencia, no una forma de cambiar permisos en una máquina real: para eso copias el comando chmod que produce y lo ejecutas tú mismo.
Tres grupos, tres permisos
Los permisos se organizan en tres grupos de tres. Los grupos son el propietario del archivo, el grupo al que pertenece y todos los demás: «otros». Dentro de cada grupo hay tres permisos: lectura, escritura y ejecución.
- Lectura (r): ver el contenido del archivo o listar las entradas de un directorio.
- Escritura (w): modificar el archivo, o añadir y eliminar entradas en un directorio.
- Ejecución (x): ejecutar el archivo como programa, o entrar en un directorio y alcanzar los archivos que contiene.
La ejecución significa algo distinto en un directorio que en un archivo, y eso confunde a mucha gente: un directorio que puedes leer pero no ejecutar te deja ver los nombres de lo que hay dentro, pero no abrir nada.
Cómo funciona el número octal
Los tres permisos de cada grupo se comprimen en un dígito octal sumando valores fijos: lectura es 4, escritura es 2 y ejecución es 1. Lectura-escritura-ejecución es 4+2+1 = 7; lectura-ejecución es 4+1 = 5; lectura-escritura es 4+2 = 6. Tres grupos dan tres dígitos.
755 7 = 4+2+1 # propietario: lectura + escritura + ejecución 5 = 4+0+1 # grupo: lectura + ejecución 5 = 4+0+1 # otros: lectura + ejecución
Así, 755 significa «el propietario puede hacerlo todo, los demás pueden leer y ejecutar pero no modificar», que es el modo habitual de un programa o un directorio. 644 —lectura y escritura para el propietario, solo lectura para el resto— es el modo habitual de un archivo corriente. Cuando el patrón resulta familiar, los modos comunes se leen de un vistazo.
La cadena simbólica
La otra grafía es la que imprime ls -l: nueve caracteres, tres por grupo, cada uno su letra o un guion. 755 es rwxr-xr-x; 644 es rw-r--r--. Contiene exactamente la misma información que el número octal, solo que dispuesta de modo que ves cada permiso en lugar de sumar dígitos mentalmente.
Una línea de ls -l lleva un décimo carácter al principio: una d para un directorio, un guion para un archivo normal, una l para un enlace simbólico. Ese carácter inicial es el tipo del archivo, no un permiso, y chmod no puede cambiarlo. Puedes pegar aquí todo el campo de permisos de ls -l y el carácter de tipo simplemente se ignora.
Los bits especiales: setuid, setgid y sticky
Por encima de los nueve bits ordinarios hay tres especiales, escritos como un cuarto dígito octal opcional al principio: setuid (4), setgid (2) y el bit sticky (1). No tienen columna propia; en su lugar, cada uno se superpone a una casilla de ejecución de la cadena simbólica, y de ahí vienen las mayúsculas que tanto desconciertan.
- setuid en un ejecutable hace que se ejecute como el propietario del archivo y no como el usuario que lo lanzó. Así es como passwd puede actualizar un archivo del sistema en el que no puedes escribir directamente, y por eso un programa setuid con un fallo es un agujero grave.
- setgid en un ejecutable lo ejecuta con el grupo del archivo. En un directorio hace algo más útil y seguro: los archivos nuevos creados dentro heredan ese grupo en lugar del grupo del creador.
- El bit sticky en un directorio implica que solo el propietario de un archivo puede borrarlo o renombrarlo, aunque todos puedan escribir en el directorio. Es lo que mantiene /tmp compartido pero seguro. En un archivo normal no hace nada.
En la cadena simbólica, un bit especial activo convierte su casilla de ejecución en una letra: s en la del propietario para setuid, s en la del grupo para setgid y t en la de otros para sticky. La caja de la letra indica si la ejecución también está activa: minúscula significa que sí, mayúscula que no.
rwsr-xr-x 4755 # setuid, y el propietario SÍ ejecuta rwSr-xr-x 4655 # setuid, pero el propietario NO ejecuta rwxrwxrwt 1777 # sticky, y otros SÍ ejecutan rwxrwxrwT 1776 # sticky, pero otros NO ejecutan
Una S o una T mayúscula casi siempre es un error: significa que se activó un bit especial en un archivo que no es ejecutable, así que el bit no tiene sobre qué actuar.
Octal o simbólico en la línea de comandos
chmod acepta ambas formas y esta herramienta escribe las dos. La forma octal fija todos los bits de una vez: chmod 755 file. La forma simbólica con = hace lo mismo de manera absoluta —chmod u=rwx,g=rx,o=rx file— enumerando cada grupo para que el resultado no dependa de cómo estuviera el archivo antes.
Existe una tercera forma, relativa, que la calculadora no necesita pero que te encontrarás: chmod +x file añade ejecución para todos, chmod g-w file quita la escritura del grupo y chmod o= file borra todo para otros. Esa forma cambia bits en relación con el modo actual en lugar de fijarlo entero, lo cual es cómodo en la línea de comandos pero no tiene un «resultado» único que mostrar.
Modos que conviene no poner
Una herramienta de permisos también debería decir cuándo un modo es mala idea. Dos aparecen constantemente:
- 777 da a todos los usuarios lectura, escritura y ejecución. Es el arreglo reflejo cuando algo «no funciona» y casi siempre cambia un problema pequeño por un agujero de seguridad real. El modo correcto casi siempre es más estrecho: normalmente 755 o 644.
- Cualquier archivo escribible por todos (el último dígito incluye el 2) permite que cualquier cuenta de la máquina reescriba su contenido. Para algo que se ejecuta, se carga o es de confianza, eso es una vía de entrada. Concede la escritura a un grupo, o resérvala al propietario.
La herramienta los señala cuando aparecen. No puede saber si tu objetivo es un archivo o un directorio, así que los plantea como cosas que merecen una segunda mirada y no como errores: el bit sticky es correcto en un directorio e inútil en un archivo, y solo tú sabes cuál tienes.
Preguntas frecuentes
- ¿Cuál es la diferencia entre 644 y 755?
- 644 es lectura y escritura para el propietario y solo lectura para el resto, el modo habitual de un archivo corriente. 755 añade ejecución para los tres grupos, que es lo que un programa necesita para ejecutarse y lo que un directorio necesita para poder entrarse. Usa 644 para documentos y archivos de código, y 755 para scripts y directorios.
- ¿Por qué mi modo mostró una S o una T mayúscula?
- Porque se activó un bit especial en un grupo que no tiene permiso de ejecución. Una s o t minúscula significa que tanto el bit especial como la ejecución están activos; la forma en mayúscula significa que el bit especial está activo pero la ejecución no, lo que suele indicar que el modo no es el que se pretendía; por ejemplo, 4644 (rwSr--r--) es setuid en un archivo que nadie puede ejecutar.
- ¿Qué hace realmente chmod 777 y por qué se desaconseja?
- Concede lectura, escritura y ejecución al propietario, al grupo y a todos los demás: acceso total para cualquier cuenta del sistema. Se desaconseja porque elimina todas las protecciones de golpe; un archivo en el que todos pueden escribir es un archivo que cualquiera puede manipular, y un directorio en el que todos pueden escribir es uno donde cualquiera puede colocar archivos. Casi todos los casos que recurren a 777 se resuelven con 755 o 644 y la propiedad adecuada.
- ¿Tiene que estar el dígito inicial?
- No. Cuando no hay ningún bit especial activo, el modo son solo tres dígitos —755, no 0755— y eso es lo que muestra esta herramienta. Un cero inicial se acepta y significa lo mismo; un 4, un 2 o un 1 iniciales activan setuid, setgid o el bit sticky respectivamente.
- ¿Puedo pegar una línea directamente de ls -l?
- Sí. Pega el campo de permisos de diez caracteres, como -rwxr-xr-x o drwxr-xr-x, y la herramienta quita el carácter de tipo inicial y lee el resto. El tipo (archivo, directorio, enlace) no es un permiso y chmod no puede cambiarlo, así que se ignora.
- ¿Se envía a un servidor algo de lo que introduzco?
- No. Toda la herramienta es aritmética que se ejecuta en tu navegador. Nada se sube, se registra ni se almacena, y por eso también funciona sin ninguna conexión de red.