En GNU/Linux, cuando se setean permisos sobre archivos utilizando la notación octal, se ven afectados todos los conjuntos de usuarios del sistema (user, group, others). En cambio, cuando se utiliza el modo simbólico (ugoa: user, group, others, all), es posible cambiar permisos de forma selectiva, sin afectar al resto de los conjuntos de usuarios.



Para entender esto de forma simple es mejor utilizar un ejemplo. Supongamos que se desean cambiar los permisos para el conjunto de usuarios others sin tocar los permisos para el usuario ni grupo del archivo Emiliano.tar.gz (lo que equivaldría a tocar sólo la cifra menos significativa de la notación octal).

En el modo simbólico u (user) se refiere al usuario que posee el archivo (owner, dueño), g (group) aplica a otros usuarios en el mismo grupo del archivo, y o (others, no confundir con owner) aplica a otros usuarios que no se encuentran en el mismo grupo del archivo.

Vamos al ejemplo. El archivo Emiliano.tar.gz posee usuario y grupo "nobody", con permisos 744 en notación octal:

[root@hal9000 tmp]# ll Emiliano.tar.gz
-rwxr--r-- 1 nobody nobody 9729707 Mar 11 08:14 Emiliano.tar.gz

Supongamos ahora que se desea cambiar el permiso para que el conjunto de usuarios others pueda escribir y ejecutar, pero no leer (no tiene sentido, sólo es un ejemplo). Utilizando notación octal, debería cambiar 744 por 743 ejecutando: chmod 743 Emiliano.tar.gz. Aunque, si se usa el modo simbólico, es posible desentenderse de los permisos a user y group de la siguiente forma:

[root@hal9000 tmp]# chmod o-r+wx Emiliano.tar.gz

El modo simbólico se divide en dos partes. En la primera se indican los conjuntos de usuarios a los que se van a aplicar permisos. Es posible especificar u, g, o, a (o una combinación de u, g y o). Luego se debe incluir un operador, que puede ser +, - o =. El operador + hace que los permisos seleccionados se añadan a los ya existentes; - hace que se quiten de los que ya había; y = hace que sean los únicos que van a quedar.

Como se observa el ejemplo anterior es posible quitar y añadir en el mismo comando: el modo o-r+wx quita permiso de lectura y agrega escritura y ejecución al conjunto de usuarios others. El resultado es 743 en notación octal, pues los permisos para el usuario (u) y grupo (g) no se han tocado:

[root@hal9000 tmp]# ll Emiliano.tar.gz
-rwxr---wx 1 nobody nobody 9729707 Mar 11 08:14 Emiliano.tar.gz

A modo de ejemplo adicional, en el modo simbólico no es necesario especificar todos los permisos. Si ahora se desea agregar lectura (+r) y quitar escritura (-w) al mismo conjunto, sin tocar el permiso que tenga de ejecución, utilizar el modo o+r-w:

[root@hal9000 tmp]# chmod o+r-w Emiliano.tar.gz
[root@hal9000 tmp]# ll Emiliano.tar.gz
-rwxr--r-x 1 nobody nobody 9729707 Mar 11 08:14 Emiliano.tar.gz

Pero, ¿cuál es la verdadera utilidad de este modo simbólico, si se tiene en cuenta que el modo octal es más simple y rápido?

La utilidad de el modo simbólico es su capacidad de aplicar permisos de forma selectiva. Es decir, aplicar permisos sobre un conjunto de usuarios sin alterar el resto de los conjuntos y permisos.

Supongamos que tenemos un directorio con muchos archivos y subdirectorios que poseen diferentes permisos, y deseamos establecer un mismo esquema de permisos para el conjunto others sobre todos los archivos de forma recursiva, sin alterar los permisos al usuario y grupo. Si se utiliza la notación octal es necesario especificar los permisos para usuario, grupo y otros. Lo que resultaría en que todos los archivos tengan el mismo permiso. He aquí el modo simbólico al rescate.

Ejemplificando, tenemos el directorio "Emiliano" (con usuario y grupo "root") que posee diferentes archivos con diferentes pares de usuario/grupo y diferentes permisos:

[root@hal9000 tmp]# ll -d Emiliano/
drwxr-xr-x 2 root root 4096 Mar 18 10:07 Emiliano/
[root@hal9000 tmp]# ll Emiliano/
total 9504
-rwxr-xr-x 1 nobody nobody 9729707 Mar 11 08:14 Emiliano.tar.gz
-r--r--r-- 1 root   root         0 Mar 18 10:07 Emiliano.txt

Utilizando el modo octal no podría modificar recursivamente los permisos para others sin tocar los permisos para el usuario y grupo. Notar que los archivos dentro del directorio "Emiliano" poseen diferentes permisos para usuario/grupo (755 y 444). Si deseo eliminar los permisos de lectura, escritura y ejecución para el conjunto others sin modificar el resto (es decir, que queden 750 y 440 respectivamente), sólo se puede utilizar el modo simbólico, de la siguiente forma:

[root@hal9000 tmp]# chmod -R o-rwx Emiliano/

Así se obtiene el resultado deseado:

[root@hal9000 tmp]# ll -d Emiliano/
drwxr-x--- 2 root root 4096 Mar 18 10:07 Emiliano/
[root@hal9000 tmp]# ll Emiliano/
total 9504
-rwxr-x--- 1 nobody nobody 9729707 Mar 11 08:14 Emiliano.tar.gz
-r--r----- 1 root   root         0 Mar 18 10:07 Emiliano.txt

Se han cambiado exitosamente los permisos para others sin tocar el resto.

Si ahora quisiera otorgarse ejecución a others es posible utilizar el modo o+x, ya que no es necesario especificar los bits que no se deseen modificar:

[root@hal9000 tmp]# chmod -R o+x Emiliano/
[root@hal9000 tmp]# ll -d Emiliano/
drwxr-x--x 2 root root 4096 Mar 18 10:07 Emiliano/
[root@hal9000 tmp]# ll Emiliano/
total 9504
-rwxr-x--x 1 nobody nobody 9729707 Mar 11 08:14 Emiliano.tar.gz
-r--r----x 1 root   root         0 Mar 18 10:07 Emiliano.txt

Para mayor información sobre permisos en Linux es posible acceder a los manuales ejecutando:

[root@hal9000 tmp]# man chmod
[root@hal9000 tmp]# info coreutils 'chmod invocation'


Tal vez pueda interesarte


Compartí este artículo