Como Administrador del Sistema, nuestra primera prioridad será proteger y asegurar los datos contra accesos no autorizados. Todos somos conscientes de los permisos que establecemos utilizando algunos comandos útiles de Linux como chmod, chown, chgrp… etc. Sin embargo, estos conjuntos de permisos predeterminados tienen ciertas limitaciones y a veces pueden no funcionar según nuestras necesidades. Por ejemplo, no podemos establecer diferentes conjuntos de permisos para diferentes usuarios en el mismo directorio o archivo. Por lo tanto, se implementaron las Listas de Control de Acceso (ACLs).

Supongamos que tienes tres usuarios, ‘tecmint1’, ‘tecmint2’ y ‘tecmint3’. Cada uno perteneciendo a un grupo común llamado ‘acl’. El usuario ‘tecmint1’ quiere que solo el usuario ‘tecmint2’ pueda leer y acceder a los archivos propiedad de ‘tecmint1’ y que nadie más tenga acceso a ellos.
Las ACL (Listas de Control de Acceso) nos permiten hacer esta función. Estas ACL nos permiten otorgar permisos a un usuario, grupo y a cualquier grupo de usuarios que no estén en la lista de grupos de un usuario.
Nota: Según la Documentación del Producto Redhat, proporciona soporte ACL para el sistema de archivos ext3 y los sistemas de archivos exportados por NFS.
Cómo verificar el soporte de ACL en los sistemas Linux
Antes de continuar, debes verificar si el Kernel actual y los sistemas de archivos montados tienen soporte para ACL.
1. Verificar el Soporte de ACL en el Kernel
Ejecute el siguiente comando para verificar el soporte de ACL para el sistema de archivos y la opción POSIX_ACL=Y (si en lugar de N hay Y, entonces significa que el kernel no admite ACL y necesita ser recompilado).
[root@linux ~]# grep -i acl /boot/config* CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_REISERFS_FS_POSIX_ACL=y CONFIG_JFS_POSIX_ACL=y CONFIG_XFS_POSIX_ACL=y CONFIG_BTRFS_FS_POSIX_ACL=y CONFIG_FS_POSIX_ACL=y CONFIG_GENERIC_ACL=y CONFIG_TMPFS_POSIX_ACL=y CONFIG_NFS_V3_ACL=y CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3_ACL=y CONFIG_NFS_ACL_SUPPORT=m CONFIG_CIFS_ACL=y CONFIG_9P_FS_POSIX_ACL=y
2. Verificar los paquetes necesarios
Antes de comenzar a usar los ACL, asegúrese de tener instalados los paquetes necesarios. A continuación se detallan los paquetes necesarios que deben instalarse usando yum o apt-get.
[root@linux ~]# yum install nfs4-acl-tools acl libacl [on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl [on Debian based systems]
3. Verificar el soporte de ACLs en el sistema de archivos montado
Ahora, verifique si el sistema de archivos montado lo está con la opción de ACL o no. Podemos usar el comando ‘mount’ para verificar lo mismo como se muestra a continuación.
[root@linux ~]# mount | grep -i root /dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)
Pero en nuestro caso no está mostrando acl de forma predeterminada. Así que, a continuación, tenemos la opción de volver a montar la partición montada nuevamente usando la opción acl. Sin embargo, antes de continuar, tenemos otra opción para asegurarnos de que la partición esté montada con la opción acl o no, porque para los sistemas recientes puede estar integrada con la opción de montaje predeterminada.
[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl Default mount options: user_xattr acl
En la salida anterior, puede ver que la opción de montaje predeterminada ya tiene soporte para acl. Otra opción es volver a montar la partición como se muestra a continuación.
[root@linux ~]# mount -o remount,acl /
A continuación, agregue la siguiente entrada al archivo ‘/etc/fstab’ para que sea permanente.
/dev/mapper/fedora-root / ext4 defaults,acl 1 1
Nuevamente, vuelva a montar la partición.
[root@linux ~]# mount -o remount /
4. Para el servidor NFS
En el servidor NFS, si el sistema de archivos que es exportado por el servidor NSF admite ACL y los ACL pueden ser leídos por los clientes NFS, entonces los ACLs son utilizados por el sistema cliente.
Para deshabilitar los ACL en la parte compartida de NFS, debes añadir la opción “no_acl” en el archivo ‘/etc/exportfs‘ en el Servidor NFS. Para deshabilitarlo en el lado del cliente de NSF, nuevamente utiliza la opción “no_acl” durante el montaje.
Cómo implementar el soporte de ACL en sistemas Linux
Hay dos tipos de ACLs:
- ACL de Acceso: Se utilizan para otorgar permisos en archivos o directorios.
- ACLs Predeterminados: Se utilizan para establecer/listar la lista de control de acceso en un directorio específico solamente.
Diferencia entre ACL de Acceso y ACL Predeterminados:
- Los ACLs predeterminados solo se pueden utilizar a nivel de directorio.
- Cualquier subdirectorio o archivo creado dentro de ese directorio heredará los ACL de su directorio padre. Por otro lado, un archivo hereda los ACL predeterminados como sus ACL de acceso.
- Utilizamos “-d” para establecer ACLs predeterminados y los ACL Predeterminados son opcionales.
Antes de establecer los ACLs predeterminados
Para determinar los ACLs predeterminados de un archivo o directorio específico, utiliza el comando ‘getfacl‘. En el ejemplo a continuación, el comando getfacl se utiliza para obtener los ACLs predeterminados de una carpeta ‘Música‘.
[root@linux ~]# getfacl Music/ # file: Music/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:other::rw-
Después de establecer los ACLs predeterminados
Para establecer los ACLs predeterminados de un archivo o directorio específico, utiliza el comando ‘setfacl‘. En el ejemplo a continuación, el comando setfacl establecerá nuevos ACLs (lectura y ejecución) en una carpeta ‘Música’.
[root@linux ~]# setfacl -m d:o:rx Music/ [root@linux ~]# getfacl Music/ # file: Music/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:other::r-x
Cómo establecer nuevos ACLs
Utilice el comando ‘setfacl’ para establecer o modificar en cualquier archivo o directorio. Por ejemplo, para otorgar permisos de lectura y escritura al usuario ‘tecmint1‘.
# setfacl -m u:tecmint1:rw /tecmint1/example
Cómo ver ACLs
Utilice el comando ‘getfacl‘ para ver la ACL en cualquier archivo o directorio. Por ejemplo, para ver la ACL en ‘/tecmint1/ejemplo‘ use el siguiente comando.
# getfacl /tecmint1/example # file: tecmint1/example/ # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
Cómo eliminar ACLs
Para eliminar ACL de cualquier archivo/directorio, utilizamos las opciones x y b como se muestra a continuación.
# setfacl -x ACL file/directory # remove only specified ACL from file/directory. # setfacl -b file/directory #removing all ACL from file/direcoty
Implementemos los ACLs en los siguientes escenarios.
Dos usuarios (tecmint1 y tecmint2), ambos con un grupo secundario común llamado ‘acl‘. Crearemos un directorio propiedad de ‘tecmint1‘ y daremos permisos de lectura y ejecución en ese directorio al usuario ‘tecmint2‘.
Paso 1: Crear dos usuarios y eliminar la contraseña de ambos
[root@linux ~]# for user in tecmint1 tecmint2 > do > useradd $user > passwd -d $user > done Removing password for user tecmint1. passwd: Success Removing password for user tecmint2. passwd: Success
Paso 2: Crear un grupo y Usuarios al Grupo Secundario.
[root@linux ~]# groupadd acl [root@linux ~]# usermod -G acl tecmint1 [root@linux ~]# usermod -G acl tecmint2
Paso 3: Crear un directorio /tecmint y cambiar la propiedad a tecmint1.
[root@linux ~]# mkdir /tecmint1 [root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/ drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1 getfacl: Removing leading '/' from absolute path names # file: tecmint1 # owner: tecmint1 # group: root user::rwx group::r-x other::r-x
Paso 4: Iniciar sesión con tecmint1 y crear un directorio en la carpeta /tecmint.
[tecmint@linux ~]$ su - tecmint1 Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/ [tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll total 4 drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami tecmint1
Paso 5: Ahora establece ACL usando ‘setfacl‘, para que ‘tecmint1‘ tenga todos los permisos rwx, ‘tecmint2‘ tenga solo permiso de lectura en la carpeta ‘ejemplo‘ y los otros no tengan permisos.
$ setfacl -m u:tecmint1:rwx example/ $ setfacl -m u:tecmint2:r-- example/ $ setfacl -m other:--- example/ $ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::r-x mask::rwx other::---
Paso 6: Ahora inicia sesión con otro usuario, es decir, ‘tecmint2‘ en otra terminal y cambia al directorio ‘/tecmint1‘. Intenta ver los contenidos usando el comando ‘ls‘ y luego intenta cambiar de directorio y observa la diferencia como se muestra a continuación.
[tecmint@linux ~]$ su - tecmint2 Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/ [tecmint2@linux tecmint1]$ ls -lR example/ example/: total 0
[tecmint2@linux tecmint1]$ cd example/ -bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
Paso 7: Ahora otorga permiso de ‘ejecución a ‘tecmint2‘ en la carpeta ‘ejemplo‘ y luego utiliza el comando ‘cd‘ para ver el efecto. Ahora ‘tecmint2‘ tiene permisos para ver y cambiar de directorio, pero no tiene permisos para escribir nada.
[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/ [tecmint1@linux tecmint1]$ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-x group::rwx mask::rwx other::---
[tecmint@linux ~]$ su - tecmint2 Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/ [tecmint2@linux tecmint1]$ cd example/ [tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test touch: cannot touch ‘test’: Permission denied
Nota: Después de implementar ACL, verás un signo ‘+‘ adicional en la salida de ‘ls –l’ como se muestra a continuación.
[root@linux tecmint1]# ll total 4 drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example
Enlaces de referencia
Source:
https://www.tecmint.com/secure-files-using-acls-in-linux/