TOP

CHMOD: permisos de ejecución, lectura y escritura

Desde la Terminal, e incluso desde el Nautilus, tanto en Ubuntu como en cualquier otra distro, podemos hacer una gestión eficiente de quién puede (o no) tener acceso a un archivo, carpeta o partición del disco o red.

Para ello podemos utilizar el chmod, que no es otra cosa que la abreviatura de Change Mode (cambio de modo), una orden que permite otorgar o quitar permisos a un usuario concreto o a un grupo de usuarios y cuya estructura, desde la línea de comando, sigue el siguiente patrón:

chmod [who] [opcion][permiso] [nombre_archivo]

donde:

[who] = usuario al que se les otorga o se le quita el permiso (más adelante lo concretaré)
[opcion] = hace referencia a si damos o quitamos permiso a un usuario o grupo de usuarios
[permiso] = permiso de lectura, escritura y ejecución
[nombre_archivo] = hace referencia al archivo, carpeta o partición a la que afecta el permiso.

Según el tipo de usuario [who] al que le afecta el permiso, tenemos que:

[u] = propietario del archivo o user
[g] = grupo de usuarios o group
[o] = otros usuarios u others
[a] = todos los usuarios o all

En cuanto a las opciones [opciones] a las que le afecta el permiso, tenemos que:

[+] = otorga permiso
[-] = quita permiso

Y según el tipo de permiso [permiso], las posibilidades son tres para cada usuario:

[r] = permiso de lectura
[w] = permiso de escritura
[x] = permiso de ejecución

NOTA IMPORTANTE: todas estas variables se escriben, desde la línea de comando, sin los corchetes.

Ahora veamos un ejemplo sobre toda esta teoría. Para empezar, consideremos que queremos otorgar permisos a un usuario para que puede ver y escribir el archivo con nombre Hola.odt, que es el formato predeterminado del procesador de textos del OpenOffice. Nos interesa que quien pueda leer y escribir dicho archivo sea, en nuestro ejemplo, el usuario blogoblo.

Abrimos la terminal y escribimos lo siguiente:

chmod blogoblo +rw Hola.odt

Con este comando le estamos ordenando al sistema que cambie el modo (chmod) al usuario (blogoblo) para que pueda (+) leer (r) y escribir (w) el archivo Hola.odt.

Si sólo quisiera que pudiera ver el archivo pero no escribir, el comando sería:

chmod blogoblo +r-w Hola.odt

Si queremos que todos los usuarios (a) puedan ver (+r) el archivo Hola.odt pero no escribir (-w) en él, en la Terminal escribiríamos:

chmod a +r-w Hola.odt


También existe otra manera de realizar el mismo proceso pero basado en una combinación de tres dígitos. Este proceso, llamado absoluto, en la Terminal adoptar un patrón más simplificado:

chmod [NML] [nombre_archivo]

en donde:

[N] = hace referencia al usuario propietario y es un valor comprendido entre 0 y 7
[M] = hace referencia al grupo de usuarios y es un valor comprendido entre 0 y 7
[L] = hace referencia a todos los usuarios y es un valor comprendido entre 0 y 7

A su vez, el número indica el tipo de permiso que tiene cada usuario con lo que un número igual a 0 (cero) indica que no tiene ningún permiso y un valor igual a 7 indica que tiene todos los permisos. El valor dentro de ese rango, indicará más o menos permiso para cada tipo de usuario. Es decir:

[NML] = [0] = No tiene ningún permiso
[NML] = [1] = Sólo permite la ejecución
[NML] = [2] = Sólo permite la escritura
[NML] = [3] = Permite la escritura y ejecución
[NML] = [4] = Sólo permite la lectura
[NML] = [5] = Permite la lectura y ejecución
[NML] = [6] = Permite la lectura y escritura
[NML] = [7] = Permite lectura, escritura y ejecución

Por tanto, y para los tres tipos de usuarios (propietario, grupo y todos los demás), que tiene tres tipos de permiso cada uno, nos encontramos con que el grado de permiso dependerá del valor que le asignemos con el chmod. Es decir, si damos la orden:

chmod 777 Hola.odt

le estamos indicando que todos los usuarios (propietario, grupo y todos) tienen plena autorización [7] para leer, escribir y ejecutar el archivo hola.odt porque el primer siete indica que el usuario propietario tiene permitida la lectura, escritura y ejecución de Hola.odt; el segundo siete exactamente lo mismo pero para el grupo de usuarios; y el tercer siete, idéntico pero para todos los usuarios.

Este comando tiene su equivalente en este otro:

chmod ugoa +rwxrwxrwx Hola.odt

Veamos otro ejemplo: si quiero que el propietario tenga todos los privilegios, el grupo sólo de lectura y el resto de usuarios sólo el derecho de ejecución, la orden que daré desde la Terminal, será:

chmod 721 Hola.odt

A partir de aquí, ya sólo es una cuestión de probar y probar combinaciones, en función de lo que queramos.

Te dejo otro ejemplo más, a ver si descifras el mensaje:

chmod 111 happy.run

;-)

[Actualización, 20/02/2008] Me dejo un 'pequeño detalle: ¿cómo saber el estado actual de permisos en el que se encuentra un archivo/directorio/partición? Pues escribiendo el siguiente comando desde la terminal:

ls -l [nombre_archivo]

que nos dará por pantalla la siguiente línea, entre otras:

drwxr-xr-x 2 blogoblo blogoblo 4096 2008-02-16 17:54 Música

en donde la [d] inicial significa que se trata de un directorio (también podríamos encontrarnos con la expresión [l] que significa link o enlace) y el resto de información hace referencia a los diferentes permisos según el tipo de usuario, como ya hemos visto más arriba.

2 comentarios:

  1. Muy buena la explicacion, muy didactica. Gracias

  2. Gracias por la explicación

    Saludos desde Venezuela