¿Qué son los modos octales y simbólicos de chmod?

chmod establece los permisos de un archivo en Linux, macOS y otros sistemas Unix, y acepta dos notaciones. Un modo octal, como 755, tiene un dígito para el propietario, el grupo y todos los demás, donde leer es 4, escribir es 2 y ejecutar es 1. Un modo simbólico, como u=rwx,g=rx,o=rx, nombra las clases (u, propietario; g, grupo; o, otros; a, todos) y los permisos (r, w, x) en su lugar.

Los modos simbólicos también pueden cambiar los permisos en lugar de establecerlos todos: u+x añade permiso de ejecución para el propietario, go-w elimina el permiso de escritura para el grupo y los demás, y g=u copia los permisos del propietario al grupo. Un modo octal siempre establece todos los permisos, por lo que el resultado octal de un cambio depende del modo que tuviera el archivo anteriormente.

Descripción de la herramienta

Esta herramienta convierte modos de chmod entre la notación octal y la simbólica. Elige la notación de origen y la de destino, o deja el origen en detección automática: introduce 755 para obtener u=rwx,g=rx,o=rx, o introduce un modo simbólico para obtener el valor octal. Para cambios como u+x o a+X, introduce el modo actual del archivo y consulta el modo que chmod dejaría aplicado. También puedes pegar una cadena de permisos de ls -l, como -rwxr-xr-x, o un comando completo de chmod.

Ejemplos

Octal Simbólico ls -l Uso habitual
644 u=rw,go=r -rw-r--r-- Archivos normales
755 u=rwx,go=rx -rwxr-xr-x Scripts, programas y directorios
600 u=rw,go= -rw------- Archivos privados, como claves SSH
2775 u=rwx,g=rwxs,o=rx drwxrwsr-x Directorios compartidos que conservan su grupo
1777 a=rwx,+t drwxrwxrwt /tmp y otras carpetas compartidas de trabajo
4755 u=rwxs,go=rx -rwsr-xr-x Programas como passwd

Características

  • Convierte de octal a simbólico y de simbólico a octal, con un botón de intercambio para cambiar la dirección
  • Detecta la notación del modo introducido o convierte desde la notación que elijas
  • Aplica cambios relativos como u+x, go-w, a=r,u+w, g=u y a+X a un modo actual
  • Gestiona setuid, setgid y el sticky bit (s, t y los modos octales de 4 dígitos)
  • Escribe el modo simbólico completo (u=rwx,g=rx,o=rx) o compacto (u=rwx,go=rx)
  • Lee y escribe cadenas de permisos de ls -l, incluidos s, S, t y T
  • Acepta comandos pegados como sudo chmod -R 755 dir
  • Señala el carácter exacto cuando un modo no es válido

Cómo funciona

Un modo octal se interpreta como un máximo de cuatro dígitos: el primer dígito opcional contiene setuid (4), setgid (2) y sticky (1), mientras que los otros tres contienen los permisos del propietario, el grupo y los demás. Un modo simbólico se interpreta cláusula por cláusula, siguiendo la gramática de POSIX, y se aplica al modo actual de la misma forma que lo hace GNU chmod en Linux:

  • + añade permisos, - los elimina y = los establece y borra el resto para las clases indicadas.
  • X añade permiso de ejecución únicamente a los directorios y a los archivos que ya tienen permiso de ejecución para alguien.
  • s establece setuid con u y setgid con g. t establece el sticky bit con o, a o sin ninguna clase.
  • Sin una clase, como en +x, el cambio se aplica a todos, excepto a los bits bloqueados por la umask.
  • En los directorios, setuid y setgid se mantienen como están, a menos que el modo los indique, como en g-s.

La salida simbólica establece explícitamente cada bit, por lo que en un archivo produce el mismo resultado independientemente del modo que tuviera anteriormente. El sticky bit se escribe como una cláusula +t independiente porque GNU y BSD chmod aceptan ambos esta forma.

Consejos

  • Usa a+X con chmod -R para hacer que los directorios sean recorribles sin convertir todos los archivos en ejecutables.
  • chmod 755 en un directorio no elimina setgid con GNU chmod. Usa chmod 00755 o g-s para eliminarlo.
  • Ansible y muchos archivos de configuración esperan un cero inicial, como en 0755. Activa «Mostrar siempre 4 dígitos octales» para obtenerlo.
  • Un . o + después de una cadena de ls -l indica un contexto de SELinux o una ACL. Usa getfacl para ver las entradas de la ACL, que no se muestran en el modo.