Introducción
El presente artículo muestra las posibilidades del modelo de permisos basado en listas de control de acceso o ACLs. Sobre todo debido a que el modelo de permiso de accesos UGO (User, Group, Others) tradicional de GNU/Linux es bastante limitado. Una de las características que se echan en falta en los sistemas GNU/Linux actuales, especialmente en entornos corporativos, es la posibilidad de especificar los permisos de acceso a los ficheros con mayor granularidad que en el sistema tradicional.
Hay un dato que se suele desconocer sin embargo y es que el sistema de ficheros ext2, desde su diseño original, previó la inclusión de este tipo de sistemas de control de acceso y estaban incluidos los enganches (hooks) necesarios para su implementación posterior, de forma 100% transparente y compatible hacia atrás.
Listas de control de acceso (ACL)
- Es un estándar Posix que extiende las posibilidades de los permisos admitiendo permisos específicos para usuarios/grupos sobre objetos concretos.
- En GNU/Linux está disponible en ext2/ext3/xfs/jfs/Reiserfs...
- Cada fichero/directorio tiene asociado una lista ACL compuesta por una serie de entradas (Access Control Entry, ACE). Cada ACE define un par (usuario/grupo, permiso).
- El sistema de ficheros tiene que estar montado con la opción acl:
$sudo mount -o remount,acl /
- Instalación de las utilidades para la gestión de las listas de acceso:
$sudo apt-get install acl
- Configurar el fstab para que el sistema de ficheros soporte las ACLs:
- Editar el fichero y buscar la línea correspondiente a / (raíz) o al sistema de ficheros que le vamos a aplicar las ACLs.
- Añadir acl, (ojo con la coma, es obligatoria) justo antes de donde pone errors=remount, pegadito y sin espacios, es decir, al inicio de la sección de opciones.
- Realizar el montaje del sistema de ficheros:
$sudo mount -a
Buscar el programa a restringir
Hay veces que no sabemos el nombre del programa al que queremos aplicarle las ACL. La mejor opción de que disponemos es ejecutar el programa y, a continuación, ver que se está ejecutando por ese usuario:
$sudo ps -ef | grep "nombre_usuario"
En la lista buscaremos el programa, casi siempre estará en último lugar, si no es lo último que se ha ejecutado.
Restringir los permisos
Establecer los permisos al fichero /usr/bin/gnome-control-center, por ejemplo. Tienes que ser root, no te vale con el sudo.
- Quitar acls anteriores:
setfacl -b -k -R /usr/bin/gnome-control-center - Permiso de solo lectura para el usuario que especifiques:
setfacl -m u:nombre_usuario:r /usr/bin/gnome-control-center - Ver los permisos poniendo:
getfacl /usr/bin/gnome-control-center
Problemas
- Si por alguna razón el sistema da el mensaje: setfacl: /usr/bin/gnome-control-center: La operación no está soportada, hay que comprobar si el sistema de ficheros se montó correctamente con la opción acl. Ejecutamos el comando mount para ver los sistemas de archivos montados:
#mountEste comando debe mostrar las opciones de montado de los sistemas de ficheros, algo así como:/dev/sda1 on / type ext4 (rw,acl,errors=remount-ro) proc on /proc type proc (rw,noexec,nosuid,nodev) none on /sys type sysfs (rw,noexec,nosuid,nodev) fusectl on /sys/fs/fuse/connections type fusectl (rw) none on /sys/kernel/debug type debugfs (rw) none on /sys/kernel/security type securityfs (rw) none on /dev type devtmpfs (rw,mode=0755) none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) none on /dev/shm type tmpfs (rw,nosuid,nodev) none on /var/run type tmpfs (rw,nosuid,mode=0755) none on /var/lock type tmpfs (rw,noexec,nosuid,nodev) binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)Vemos que la partición raíz ha sido montada con opciones para las acl. En el caso de que no aparezca con esas opciones habría que ejecutar el comando mount -o, tal y como se explicó más arriba, para que se vuelva a montar y así el comando setfacl no de error.
El uso de las ACLs en GNU/Linux puede sernos de gran utilidad. Recomiendo, como siempre, consultar las páginas del manual para ver una referencia completa de cada comando utilizado en este artículo. Las acciones llevadas a cabo en este artículo han sido probadas en sistemas con la distribución de Ubuntu 10.10, 11.04, 11.10 instaladas.

Comentarios
Publicar un comentario