Por defecto en los sistemas de ficheros ext* las ACL ya se encuentran habilitadas. Existen dos comandos para su gestión:
- getfacl: Muestra información de los permisos de ficheros y carpetas.
- setfacl: Establece o modifica las ACL de dichos ficheros y carpetas.
Para conocer el detalle de los argumentos disponibles tanto en getfacl como setfacl podemos consultar su ayuda con man.
Para entender mejor su funcionamiento pondré un escenario muy sencillo como ejemplo.
Escenario
Estructura de directorios:├── Común
├── Pepe
└── Juan
Con los siguientes usuarios y grupos:
- Usuarios: Pepe, Juan
- Grupo: Compartido
# tail -n 2 /etc/passwd
Pepe:x:1003:1003::/home/Pepe:/bin/bash
Juan:x:1004:1004::/home/Juan:/bin/bash
Maria:x:1005:1005::/home/Maria:/bin/bash
# tail -n 3 /etc/group
Compartido:x:1000:Pepe,Juan
Pepe:x:1003:
Juan:x:1004:
Maria:x:1004:
¿Qué tipo de permisos se deberían aplicar en este escenario?
1. Cada usuario puede acceder su carpeta con permisos de lectura, escritura y ejecución.
2. Pepe no tendrá ningún tipo de permisos en la carpeta de Juan. Sin embargo, Juan solo tendrá acceso de lectura sobre la carpeta de Pepe.
3. Todos los usuarios pertenecen al grupo llamado "Compartido", este grupo tendrá acceso total al directorio "Común".
4. Cualquier otro usuario creado en el sistema (Maria) no podrá acceder a ningún recurso. Excepto el usuario root, que si tendrá acceso total para poder modificar permisos y administración de los recursos.
Después de establecer las ACLs podemos apreciar que al listar los directorios en formato lista se añade un nuevo signo "+" en los permisos de Unix, esto nos indica que ese directorio o fichero tiene más información sobre permisos y que podemos ver con getfacl.
4. Cualquier otro usuario creado en el sistema (Maria) no podrá acceder a ningún recurso. Excepto el usuario root, que si tendrá acceso total para poder modificar permisos y administración de los recursos.
Establecemos los permisos basados en ACLs
# ls -lh
total 12K
drwxr-xr-x 2 root root 4.0K Feb 12 17:53 Común
drwxr-xr-x 2 root root 4.0K Feb 12 17:53 Juan
drwxr-xr-x 2 root root 4.0K Feb 11 23:13 Pepe
# setfacl -m o::--- Común/ ; setfacl -m o::--- Pepe/ ; setfacl -m o::--- Juan/
# setfacl -m g:Compartido:rwx Común/
# setfacl -m u:Juan:rwx Juan/ ; setfacl -m u:Pepe:--- Juan/
# setfacl -m u:Pepe:rwx Pepe/ ; setfacl -m u:Juan:r-- Pepe/
Después de establecer las ACLs podemos apreciar que al listar los directorios en formato lista se añade un nuevo signo "+" en los permisos de Unix, esto nos indica que ese directorio o fichero tiene más información sobre permisos y que podemos ver con getfacl.
# ls -lh
total 12K
drwxr-xr-x+ 2 root root 4.0K Feb 12 17:53 Común
drwxr-xr-x+ 2 root root 4.0K Feb 12 17:53 Juan
drwxr-xr-x+ 2 root root 4.0K Feb 11 23:13 Pepe
# getfacl *
# file: Común
# owner: root
# group: root
user::rwx
group::---
group:Compartido:rwx
mask::rwx
other::---
# file: Juan
# owner: root
# group: root
user::rwx
user:Pepe:---
user:Juan:rwx
group::---
mask::rwx
other::---
# file: Pepe
# owner: root
# group: root
user::rwx
user:Pepe:rwx
user:Juan:r--
group::---
mask::rwx
other::---
Comprobamos que las reglas se establecieron correctamente
Usuario Peperoot@rpi:~# su - Pepe
Pepe@rpi:~$ cd /Recursos/
Pepe@rpi:/Recursos$ touch Pepe/test-pepe
Pepe@rpi:/Recursos$ touch Juan/test-pepe
touch: cannot touch 'Juan/test-pepe': Permission denied
Pepe@rpi:/Recursos$ ls Juan/
ls: cannot open directory 'Juan/': Permission denied
Pepe@rpi:/Recursos$ touch Común/test-pepe
Pepe@rpi:/Recursos$ tree -pugh
.
├── [drwxrwx--- root root 4.0K] Común
│ └── [-rw-rw-r-- Pepe Pepe 0] test-pepe
├── [drwxrwx--- root root 4.0K] Juan [error opening dir]
└── [drwxrwx--- root root 4.0K] Pepe
└── [-rw-rw-r-- Pepe Pepe 0] test-pepe
3 directories, 2 files
Usuario Juan
root@rpi:~# su - Juan
Juan@rpi:~$ cd /Recursos/
Juan@rpi:/Recursos$ touch Juan/test-juan
Juan@rpi:/Recursos$ touch Pepe/test-juan
touch: cannot touch 'Pepe/test-juan': Permission denied
Juan@rpi:/Recursos$ ls Pepe/
ls: cannot access 'Pepe/test-pepe': Permission denied
test-pepe
Juan@rpi:/Recursos$ touch Común/test-juan
Juan@rpi:/Recursos$ tree -pugh
.
├── [drwxrwx--- root root 4.0K] Común
│ ├── [-rw-rw-r-- Juan Juan 0] test-juan
│ └── [-rw-rw-r-- Pepe Pepe 0] test-pepe
├── [drwxrwx--- root root 4.0K] Juan
│ └── [-rw-rw-r-- Juan Juan 0] test-juan
└── [drwxrwx--- root root 4.0K] Pepe [error opening dir]
3 directories, 3 files
Usuaria Maria
root@rpi:~# su - Maria
Maria@rpi:~$ cd /Recursos/
Maria@rpi:/Recursos$ touch Común/test-maria
touch: cannot touch 'Común/test-maria': Permission denied
Maria@rpi:/Recursos$ touch Pepe/test-maria
touch: cannot touch 'Pepe/test-maria': Permission denied
Maria@rpi:/Recursos$ touch Juan/test-maria
touch: cannot touch 'Juan/test-maria': Permission denied
Maria@rpi:/Recursos$ ls Común/ ; ls Pepe/ ; ls Juan/
ls: cannot open directory 'Común/': Permission denied
ls: cannot open directory 'Pepe/': Permission denied
ls: cannot open directory 'Juan/': Permission denied
Maria@rpi:/Recursos$ tree -pugh
.
├── [drwxrwx--- root root 4.0K] Común [error opening dir]
├── [drwxrwx--- root root 4.0K] Juan [error opening dir]
└── [drwxrwx--- root root 4.0K] Pepe [error opening dir]
3 directories, 0 files
Backups de las ACLs de directorios o ficheros
Algo interesante es que podemos realizar backups y restauraciones de los permisos ACLs. Siguiedo el escenario anterior.Para realizar exportar las ACLs del directorio de Juan, usamos el argumento -R.
getfacl -R Juan/ > backup-acl-Juan.txtPara realizar una restauración de las ACLs del directorio de Juan, usamos el argumento --restore=directorio/fichero.
setfacl --restore=backup-acl-Juan.txt
Esto solamente es un ejemplo muy básico con la idea de mostrar su uso. Lo ideal es aplicarlo en aquellos directorios/ficheros que sabemos que solo deberían acceder determinados usuarios, con el fin de ir fortificando y endureciendo la seguridad en los sistemas de ficheros de nuestros entornos Linux.
Saludos!
No hay comentarios
Publicar un comentario