Hay ocasiones en las que los permisos en un sistema de ficheros se nos pueden quedar cortos, mediante ACLs se consigue un control mas granular sobre el acceso a cada fichero.
Los requisitos necesarios para poder utilizar ACLs son
- e2fsprogs >= 1.28 eix e2fsprogs
- Soporte en el kernel File Systems –> Extended attributes
- Paquete sys-apps/attr: emerge -av sys-apps/attr
- /etc/fstab con las opciones acl, user_xattr
Ahora ya podemos empezar a definir ACLs, las herramientas para ello son:
- getfacl: Consultar las ACLs de un fichero dado
- setfacl: Modificar las ACLs de un fichero dado
Vamos a poner un caso real en el que se verá todo mas fácil, supongamos que disponemos de un directorio donde queremos que cierto grupo de usuarios tengan acceso de lectura y ejecución y otro grupo con permisos de lectura, escritura y ejecución.
Con este escenario nos sería imposible cumplir con las condiciones con el sistema de permisos tradicional de Linux, para resolverlo vamos a crear ACLs:
mkdir prueba
useradd -s /bin/bash user1
useradd -s /bin/bash user2
useradd -s /bin/bash user3
useradd -s /bin/bash user4
groupadd group_1
groupadd group_2
gpasswd -a user1 group_1
gpasswd -a user2 group_1
gpasswd -a user3 group_2
gpasswd -a user4 group_2
setfacl -m g:group_1:r-x prueba
setfacl -m g:group_2:rwx prueba
# file: prueba
# owner: root
# group: root
user::rwx
group::r-x
group:group_1:r-x
group:group_2:rwx
mask::rwx
other::r-x
Los permisos de user, group y other donde no se indica el usuario o grupo son los permisos mostrados por ls -la
Ahora si hacemos un ls -la veremos un + indicando que tiene ACLs extendidas:
drwxrwxr-x+ 2 root root 4096 sep 7 17:22 prueba
Para borrar las ACLs:
setfacl -x g:group_2 prueba
# file: prueba
# owner: root
# group: root
user::rwx
group::---
mask::---
other::---
Si queremos configurar las acls extendidas a nivel de usuario se aplican del mismo modo pero cambiando el indicador g: por u:
# file: prueba
# owner: root
# group: root
user::rwx
user:user1:r-x
group::---
mask::r-x
other::---