Una cuadrícula, cuatro notaciones
La matriz de casillas, el octal de tres dígitos, el octal de cuatro dígitos, la cadena simbólica y la línea de ls -l son vistas de los mismos nueve bits, y todas se redibujan con cada pulsación.
Convierte las casillas de lectura, escritura y ejecución en un modo octal, una cadena simbólica y un comando chmod, o pega un modo que ya tengas y ve, en palabras claras, exactamente a quién deja entrar.
Modo 755, simbólico rwxr-xr-x, en un archivo. chmod 755 script.sh. Sin avisos.
Cada clase tiene su propio dígito octal, y cada dígito es simplemente la suma de las casillas marcadas.
| Clase | Lecturar · 4 | Escrituraw · 2 | Ejecuciónx · 1 | Dígito |
|---|---|---|---|---|
| Propietariou · usuario | 4 + 2 + 17 | |||
| Grupog · grupo | 4 + 15 | |||
| Otroso · otros | 4 + 15 |
Abrir el archivo y leer sus bytes, o copiarlo a otro sitio.
Cambiar o truncar el contenido. Borrar el archivo depende, en cambio, de su directorio.
Ejecutarlo como programa. Un script también necesita lectura, porque el intérprete tiene que abrirlo.
Estos tres van delante del modo, en un dígito que casi nadie escribe nunca. Cada uno cambia en quién se convierte un proceso o lo que permite un directorio; lee la nota antes de activar uno.
El propietario puede leer el archivo, modificar el archivo y ejecutarlo como programa.
Una sola cuenta: el ID de usuario registrado en el inodo, y el primero de los dos nombres de una línea de ls -l. Root se salta estas comprobaciones casi por completo, así que un modo solo limita a los usuarios normales.
Los miembros del grupo pueden leer el archivo y ejecutarlo como programa.
Todas las cuentas del grupo del archivo, que es el segundo nombre de una línea de ls -l. La pertenencia al grupo es lo que permite a un equipo compartir el acceso de escritura sin abrirlo a toda la máquina.
Todos los demás pueden leer el archivo y ejecutarlo como programa.
Todos los que no entran en las dos primeras clases: otros inicios de sesión y todas las cuentas de demonios, como www-data o nobody. Esta es la clase en la que acaban los atacantes.
Ningún bit de escritura para todos, ningún bit especial que no pueda actuar. Eso no es lo mismo que correcto: el modo aún tiene que encajar con el uso de este archivo.
Un único chmod recursivo da el mismo modo a directorios y documentos: o los archivos acaban siendo ejecutables, o en los directorios no se puede entrar. Divídelo en dos y cada tipo recibe lo que necesita.
find script.sh -type d -exec chmod 755 {} +find script.sh -type f -exec chmod 644 {} +Una umask resta. El kernel ofrece 666 a un archivo nuevo y 777 a un directorio nuevo, y luego borra todos los bits que indica la máscara.
Con la habitual 022, por eso un archivo que acabas de crear llega como 644 en lugar de 666: la máscara quitó los bits de escritura del grupo y de los demás antes de que llegaras a verlo. Nada de esto cambia tu shell; es aritmética sobre el valor que has escrito.
Genera las credenciales que van en un archivo 600, con una entropía que de verdad puedes justificar.
Comprueba un binario descargado con su suma de verificación publicada antes de darle un bit de ejecución.
Lee los tiempos epoch de las líneas de log y de los metadatos de archivo que acompañan a estos modos.
Unix registra los permisos como nueve bits: lectura, escritura y ejecución, repetidos para el propietario, el grupo y todos los demás. Agrupa los bits de tres en tres y cada trío cabe en un solo dígito octal del 0 al 7, que es la única razón por la que chmod acepta números como 755 en lugar de una frase. El kernel comprueba las clases en orden (primero el propietario, luego el grupo, luego los demás) y se detiene en la primera que coincide contigo, así que un modo generoso con los demás no puede rescatar a un propietario al que se le ha denegado el acceso.
Los mismos tres bits significan cosas distintas en cada caso. Cambia primero el interruptor y todas las explicaciones de la página lo seguirán: la ejecución deja de significar lanzar un programa y pasa a significar entrar.
Activa lectura, escritura y ejecución para el propietario, el grupo y los demás. ¿Ya tienes un modo delante? Pega 0644 o los diez caracteres de un listado de ls -l en el campo inverso y la cuadrícula se rellena sola.
Indica el destino real y copia el comando octal, la forma de asignación para scripts o el par de comandos find que dan modos distintos a directorios y documentos en una sola pasada.
La matriz de casillas, el octal de tres dígitos, el octal de cuatro dígitos, la cadena simbólica y la línea de ls -l son vistas de los mismos nueve bits, y todas se redibujan con cada pulsación.
Pega 700, 0755, rwxrwxr-x o drwxr-xr-x. La forma de listado de diez caracteres incluso ajusta el interruptor de archivo o directorio a partir de su letra inicial, y lo que no se puede interpretar lo dice en lugar de ignorarte en silencio.
La lectura lista los nombres, la escritura añade y elimina entradas, la ejecución deja pasar una búsqueda. Esas frases se generan a partir del modo que tienes, no se imprimen desde una tabla fija.
setuid, setgid y sticky tienen cada uno su propio control y su propia explicación, incluidos los casos que el kernel ignora por completo: setuid en un script de shell, sticky en un archivo normal.
Escritura para todos, un bit setuid en un archivo que nadie puede ejecutar, un script con ejecución pero sin lectura: cada caso se señala con su propio color, con el motivo en lugar de un sermón.
Octal, la forma de asignación u=rwx,g=rx,o=rx y los dos comandos find para un árbol mixto, con la ruta de destino que escribiste ya colocada. Todo se genera en tu navegador.
Cada dígito es una clase: primero el propietario, luego el grupo y luego los demás. Dentro de un dígito, la lectura vale 4, la escritura 2 y la ejecución 1, así que 7 es 4+2+1 (lectura, escritura, ejecución), 5 es 4+1 (lectura y ejecución) y 0 es nada. Por tanto, 755 permite al propietario hacerlo todo, mientras que el grupo y todos los demás pueden leer y ejecutar, pero no modificar. Es el modo habitual para un programa y para casi todos los directorios de un sistema.
Solo el bit de ejecución. 644 da al propietario lectura y escritura, y a todos los demás lectura; 755 añade ejecución para las tres clases. Los archivos de datos llevan 644; un bit de ejecución en un PDF o en una foto no hace más que confundir. Los programas, los scripts de shell y todos los directorios llevan 755, porque en un directorio sin ejecución no se puede entrar, ni siquiera quien puede listarlo.
Concede escritura a todas las cuentas de la máquina, incluidas las cuentas de servicio a las que un atacante llega primero. Un servidor web que se ejecuta como www-data y puede reescribir la aplicación que sirve convierte un pequeño fallo en la subida de archivos en ejecución arbitraria de código. Recurrir a 777 también significa que la causa real (normalmente el propietario o el grupo equivocados) nunca se encuentra, así que la exposición sigue ahí mucho después de que se haya olvidado el error original. Corrige la propiedad con chown y concede el modo más restringido que funcione.
Solo cuando activas setuid (4000), setgid (2000) o el sticky bit (1000). Escribir 755 o 0755 hace lo mismo, porque un dígito inicial que falta se lee como cero. La sorpresa llega al volver a quitar esos bits: GNU chmod deja intactos a propósito el setuid y el setgid de un directorio salvo que los nombres, así que en Linux ni chmod 755 ni chmod 0755 quitan el setgid de un directorio; para eso hace falta chmod g-s, chmod =755 o el chmod 00755 de cinco dígitos. El chmod de BSD, incluido el de macOS, en cambio los quita con un modo normal de tres dígitos. En un archivo normal, todas las versiones los quitan.
Significa que el bit especial está activado pero el bit de ejecución correspondiente no, así que el bit especial no puede actuar. rwSr--r-- es un archivo setuid que el propietario no puede ejecutar; drwxrwxrwT es un directorio sticky sin ejecución para los demás. Una s o una t minúscula significa que ambos bits están activados y que el comportamiento está en vigor. Una mayúscula suele indicar que el bit de ejecución se quitó después de activar el bit especial, o que se escribió un modo de cuatro dígitos sin la x correspondiente; en cualquier caso, el modo no hace lo que parece.
Porque borrar no es una operación sobre el archivo, sino sobre el directorio que contiene el nombre. Escritura más ejecución en el directorio basta para desvincular cualquier entrada de su interior, diga lo que diga el propio archivo. Ese es justo el agujero que cierra el sticky bit: en un directorio 1777 como /tmp, solo el propietario de una entrada, el propietario del directorio o root pueden eliminarla.
Concede el recorrido: el derecho a resolver un nombre en su interior y llegar a cualquier cosa más profunda. Lectura y ejecución son independientes: lectura sin ejecución te deja listar los nombres pero no usarlos, así que ls funciona y abrir cualquiera de los resultados falla. Ejecución sin lectura es lo contrario, y es una técnica real: el modo 711 en un directorio personal permite que un servidor web llegue a public_html sin dejar que nadie liste qué más hay ahí. Cada directorio de una ruta necesita ejecución, o la búsqueda falla en ese nivel.
chmod fija un modo directamente; umask solo quita bits, y solo en el momento en que se crea algo. El kernel ofrece 666 para un archivo nuevo y 777 para un directorio nuevo, y luego borra todos los bits que indica la máscara; por eso la umask habitual de 022 produce archivos 644 y directorios 755, y por eso los archivos nuevos nunca son ejecutables. Es un ajuste por proceso, así que cambiarla en una shell afecta a esa shell y a sus procesos hijos, y a nada que ya exista.
Explora una colección cada vez más amplia para cálculos, documentos, escritura y el trabajo diario.