Listas de acceso con ACL

Jueves 5 de febrero de 2004. Introducción al sistema de permisos por listas de acceso (ACL) que añade funcionalidades al existente sistema de permisos de GNU/Linux y UNIX en general

  1. Sobre este documento
  2. Introducción
  3. Cambiando las listas de acceso
  4. Borrando los cambios
  5. Pasando permisos de un archivo a otro

1. Sobre este documento

© 2003 Jorge Bernal "Koke" & sindominio.net
Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, Versión 1.1 o cualquier otra versión posterior publicada por la Free Software Foundation. Se considerará como Secciones Invariantes todo el documento, no habiendo Textos de Portada ni Textos de Contra Portada. Se puede consultar una copia de la licencia en: http://www.gnu.org/copyleft/fdl.html

2. Introducción

En algunos casos, el sistema de permisos de GNU/Linux puede resultarnos insuficiente para nuestras necesidades. El sistema de ACL's (listas de acceso) extiende las posibilidades de el clásico sistema pudiendo añadir permisos de acceso a archivos a varios usuarios o grupos especificos, en lugar de uno sólo.

3. Cambiando las listas de acceso

El comando getfacl nos permite ver las listas de acceso de un archivo. Por ejemplo, para ver los atributos del archivo fanelli sería:

koke@tuxland:/shared/scripts$ ls -l fanelli
-rwx------    1 koke     users          52 2003-02-03 13:27 fanelli
koke@tuxland:/shared/scripts$ getfacl fanelli
# file: fanelli
# owner: koke
# group: users
user::rwx
group::---
other::---

Como podemos ver, la lista de acceso a fanelli marca los mismos permisos que el comando ls -l, ya que no hemos hecho nada especial. Pensemos que ahora queremos que el usuario invitado pueda también ejecutar el archivo (es un script). Normalmente no podria hacerlo:

koke@tuxland:/shared/scripts$ su invitado
Password:
invitado@tuxland:/shared/scripts$ ./fanelli
bash: ./fanelli: Permiso denegado

Sin embargo, es relativamente fácil darle permisos para eso: la opcion -m del comando setfacl permite especificar los permisos

koke@tuxland:/shared/scripts$ setfacl -m user:invitado:r-x fanelli
koke@tuxland:/shared/scripts$ getfacl fanelli
# file: fanelli
# owner: koke
# group: users
user::rwx
user:invitado:r-x
group::---
mask::r-x
other::---

Aquí vemos que los permisos específicos de invitado han cambiado y ahora puede ejecutar el script. Lo comprobaremos intentando ejecutar

fanelli como invitado

koke@tuxland:/shared/scripts$ su invitado
Password:
invitado@tuxland:/shared/scripts$ ./fanelli
Warning: Identity file /home/invitado/.ssh/id_rsa does not exist.
koke@sindominio.net's password:

Múltiples archivos: Para cambiar varios archivos de una vez podemos usar la opción -R, similar a la del comando chmod

4. Borrando los cambios

Por último, si queremos quitar los atributos extendidos de un archivo usaremos la opción -b que deja los permisos por defecto

invitado@tuxland:/shared/scripts$ exit
koke@tuxland:/shared/scripts$ setfacl -b fanelli
koke@tuxland:/shared/scripts$ getfacl fanelli
# file: fanelli
# owner: koke
# group: users
user::rwx
group::---
other::---

5. Pasando permisos de un archivo a otro

El comando setfacl permite introducir los permisos mediante un archivo de texto o la entrada estándar con el formato de salida de

getfacl. Así para copiar los permisos de un archivo a otro sería getfacl archivo_origen | setfacl -f - archiv_destino o, de un modo más largo:

$ getfacl archivo_origen > /tmp/permisos
$ setfacl -f /tmp/permisos archivo_destino