chmod, que significa "cambiar modo" (del inglés: "change mode"), es un comando asociado con el sistema operativo UNIX (estandarizados en POSIX y otros estándares) que permite la asignación de permisos de acceso a carpetas o directorios[1]​.

Sintaxis

Comando

Las opciones del comando chmod se especifica del siguiente modo:

 $ chmod [modificadores] permisos fichero/directorio

Donde:

modificadores es opcional, y puede tomar los valores:

El orden y compatibilidad de los modificadores está dada por:

[-fhv] [-R [-H | -L | -P]] [-c | -E]

Esto significa que f, h y v pueden ser usados todos a la vez, e independientemente de los valores de los demás modificadores; H, L y P son ignorados salvo que se especifique explícitamente la opción R

permisos corresponde a uno de los modos que se describen a continuación, y enumera los tipos de permisos que se brindan a las clases de usuarios.

fichero/directorio fichero o directorio al cual se otorga el permiso

Llamada al sistema

Ejemplo en lenguaje de programación C:

int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);

mode es un número entero que específica los permisos, como se detallará en el siguiente ejemplo

Especificación de permisos

Permisos básicos

Existen tres permisos independientes, llamados permisos básicos, que pueden ser permitidos (estado 1) o denegados (estado 0) a un fichero y/o directorio

El significado de estos tres permisos se resume en la siguiente tabla:

Permiso Fichero Directorio
Lectura Ver el contenido del fichero. Ver el nombre de los ficheros dentro del directorio (pero sin poder saber nada más sobre ellos como: el tipo de archivo, tamaño, propietario, permisos, etc. )
Escritura Modificar o eliminar el fichero. Agregar, eliminar y renombrar ficheros del directorio
Ejecución Ejecutar el fichero. Recorrer su árbol para acceder ficheros y subdirectorios, pero no ver los ficheros dentro del directorio (excepto que se le dé el permiso de lectura)

Clases de usuarios

Los permisos de sistemas UNIX se dividen en cuatro clases, conocidas como usuario, grupo, otros y todos (con frecuencia abreviado UGOA por sus siglas en inglés).

Por lo tanto, las clases de usuarios a los cuales se les puede asignar los permisos básicos anteriormente mencionados son:

Los permisos efectivos aplicados a un determinado usuario en relación con un fichero se determinan en un orden lógico de precedencia. Por ejemplo, el usuario propietario del fichero tendrá los permisos efectivos dados a la clase de usuario, sin importar los asignados a la clase de grupo o a la clase de otros.

Asignación de permisos en el comando chmod

Existen 2 formas o modos de asignar los permisos a los usuarios:

Modo octal

Como resultado de la combinación de los tres tipos de permisos (lectura, escritura y ejecución), con las tres clases de usuarios (dueño, grupo y otros), se obtiene permisos en total que pueden ser asignados o denegados de forma independiente.

La base 8 se utiliza habitualmente para que exista un dígito por cada combinación de permisos (un bit a modo de bandera por cada permiso, con valor 1 o 0 según el permiso esté concedido o denegado).

Así, las posibles combinaciones se resumen en números octales de tres dígitos del 000 al 777, cada uno de los cuales permite establecer un tipo de permiso distinto a cada clase de usuario:

Número Binario Lectura (r) Escritura (w) Ejecución (x)
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

Por ejemplo:

chmod 766 file.txt   # brinda acceso total al dueño
                     # y lectura y escritura a los demás
chmod 770 file.txt   # brinda acceso total al dueño y al grupo
                     # y elimina todos los permisos a los demás usuarios
chmod 635 file.txt   # Permite lectura y escritura al dueño, 
                     # escritura y ejecución al grupo,
                     # y lectura y ejecución al resto

Modo carácter

Posee 3 modificadores que permiten realizar la tarea:

Por ejemplo:

chmod +r arch.txt        # agrega permisos de lectura a todos los
                         # usuarios(solo a algunos elegidos previamente)
chmod u+w arch.txt       # agrega permisos de escritura al dueño
chmod –x arch.txt        # elimina el permiso de ejecución a todos
                         # los usuarios
chmod u=rw,go= arch.txt  # establece los permisos de lectura y escritura
                         # al dueño y elimina todos los permisos a
                         # los demás usuarios

Permisos adicionales

Los sistemas UNIX emplean típicamente tres permisos o modos adicionales. Estos permisos especiales se asignan a ficheros o directorios en conjunto, no a cada clase de forma separada (como sucedía con los permisos básicos).

Estos tres permisos (especificables de forma independiente), un bit por cada uno de ellos, permiten 8 combinaciones posibles que se expresan con un dígito en base 8 (del 0 al 7, uno por cada combinación posible) que se antepone al modo de permisos. Así, el modo se ampliaría ahora del 0000 al 7777.

Por ejemplo:

 chmod +t /home           # agrega permisos de sticky bit al directorio home
 chmod g+s /home/grupo    # agrega el setgid al grupo
 chmod gu+s /home/grupo  # agrega el setuid y el setgid al usuario y al grupo respectivamente

Véase también

Referencias

  1. «¿Qué es chmod?». IONOS Digitalguide. Consultado el 27 de julio de 2022.