Listas de control de acceso y uso de getfacl y setfacl.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org/

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2025 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Los procedimientos de este documento requieren haber estudiado y comprendido previamente los conceptos del documento titulado «Permisos del sistema de archivos.»

Las listas de control de acceso (ACL, access control lists) se utilizan para controlar los permisos de acceso de los archivos y directorios con mayor exactitud que con chmod. Cada objeto del sistema puede ser asociado a una ACL que controla el acceso de modo discrecional hacia ese objeto. Además, los directorios pueden tener asociado un ACL que controla los permisos de acceso iniciales para los objetos creados en el interior de éste, a los que se le denomina ACL predeterminado.

En resumen, cuando el sistema de archivos ha sido montado con la opción acl, es posible asignar permisos de lectura, escritura y ejecución por usuarios y grupos. El soporte necesario viene habilitado de modo predeterminado en todas las distribuciones Linux modernas.

Equipamiento lógico necesario.

La instalación estándar incluye el paquete acl. Si se realiza una instalación mínima, es necesario ejecutar lo siguiente para distribuciones Linux que utilizan dnf:

dnf -y install acl

O bien lo siguiente para distribuciones Linux que utilizan apt-get:

apt-get install acl

Se puede instalar además el paquete eiciel, el cual permite gestionar las listas de control de acceso desde el administrador de archivos del escritorio de GNOME. Ejecute lo siguiente para distribuciones Linux que utilizan dnf:

dnf -y install eiciel

O bien lo siguiente para distribuciones Linux que utilizan apt-get:

apt-get install eiciel

Procedimientos.

Todos los procedimientos descritos a continuación —salvo que se indique lo contrario— se realizarán como root.

¿Qué herramientas se utilizan?

Cuando el soporte para listas de control de acceso está habilitado en los sistemas de archivos y el paquete acl está instalado, se pueden utilizar lo siguiente:

Para obtener una descripción completa del uso de getfacl, ejecute:

man 1 getfacl

Para obtener una descripción completa del uso de setfacl, ejecute:

man 1 setfacl

Para obtener una descripción completa del formato de las listas de control de acceso, ejecute:

man 5 acl

Ver el ACL de un archivo o directorio.

Para ver el contenido de las listas de control de acceso de un archivo o directorio particular, se ejecuta getfacl con la ruta del archivo o directorio como argumento. Ejemplo:

getfacl /home/fulano

Lo anterior devolvería una salida similar la siguiente:

getfacl: Eliminando '/' inicial en nombres de ruta absolutos
# file: home/fulano
# owner: fulano
# group: fulano
user::rwx
group::---
other::---

Lo anterior muestra que sólo el propietario del directorio tiene permisos de lectura, escritura y acceso.

Respaldar y restaurar el ACL de un archivo o directorio.

Para respaldar el ACL de un archivo o directorio, se ejecuta getfacl con la opción -R, la ruta del archivo o directorio como argumento, el signo > —para redirigir la salida estándar— y la ruta del archivo donde se quiere guardar el respaldo. Ejemplo:

getfacl -R /home/fulano > /var/respaldos/respaldo-home-fulano.txt

Para restaurar el respaldo, hay que cambiarse primero al directorio /:

cd /

Y ejecutar setfacl con la opción --restore y la ruta del archivo de respaldo como argumento. Ejemplo:

setfacl --restore=/var/respaldos/respaldo-home-fulano.txt

Opciones de setfacl.

Es importante destacar las opciones de setfacl pues son relevantes para cualquier procedimiento.

Asignación de permisos a otro usuario.

Para lograr que un usuario en particular pueda acceder también a este directorio, se ejecuta setfacl, con la opción -m para modificar la lista de control de acceso, [u,g,o]:[usuario,grupo]:[r,w,x] y la ruta del directorio como argumentos. Ejemplo:

setfacl -m u:zutano:rX /home/fulano

En el ejemplo anterior se utilizó X mayúscula para aplicar el bit de acceso sólo a directorios.

📝 Nota. Si lo prefiere, también puede utilizar notación octal:

setfacl -m u:zutano:5 /home/fulano

Lo anterior establece que se añaden permisos de lectura y acceso al directorio /home/fulano para el usuario zutano.

Para verificar, ejecute de nuevo getfacl con la ruta del directorio modificado como argumento:

getfacl /home/fulano

Lo anterior devolvería una salida similar a la siguiente:

getfacl: Eliminando '/' inicial en nombres de ruta absolutos
# file: home/fulano
# owner: fulano
# group: fulano
user::rwx
user:zutano:r-x
group::---
mask::r-x
other::---

Asignación de permisos a múltiples usuarios.

Pueden asignarse permisos diferentes para otros usuarios. Ejemplo:

setfacl -m u:perengano:rwX /home/fulano

Lo anterior establece que se añaden permisos de lectura, escritura y acceso al directorio /home/fulano para el usuario perengano. Si utiliza X mayúscula se indicará que se trata específicamente del bit de acceso, en lugar de acceso y ejecución.

Para verificar lo anterior, se ejecuta de nuevo getfacl con la ruta del directorio modificado como argumento:

getfacl /home/fulano

Lo anterior devolvería una salida similar a la siguiente:

getfacl: Eliminando '/' inicial en nombres de ruta absolutos
# file: home/fulano
# owner: fulano
# group: fulano
user::rwx
user:perengano:rwx
user:zutano:r-x
group::---
mask::rwx
other::---

Estos permisos que se establecieron en la lista de control de acceso del directorio /home/fulano son exclusivamente para éste. Cualquier nuevo archivo o directorio creado carecerá de estos nuevos permisos. Si se desea que éstos permisos se vuelvan los predeterminados para los nuevos archivos y directorios que sean creados en lo sucesivo dentro del directorio /home/fulano, se debe ejecutar setfacl añadiendo la opción -d para definir que serán los permisos predeterminados para nuevos archivos y directorios. Ejemplo:

setfacl -d -m u:zutano:rX /home/fulano
setfacl -d -m u:perengano:rwX /home/fulano

Se recomienda utilizar X mayúscula para indicar que sólo se aplicará el bit de acceso a directorios evitando aplicar el bit de ejecución a los archivos.

📝 Nota. Lo anterior también se puede hacer en notación octal:

setfacl -d -m u:zutano:5 /home/fulano
setfacl -d -m u:perengano:7 /home/fulano

Y además simplificar todo lo anterior en una sola operación:

setfacl -m d:u:zutano:5,d:u:perengano:7 /home/fulano

Para verificar todo lo anterior, se ejecuta de nuevo getfacl con la ruta del directorio modificado como argumento:

getfacl /home/fulano

Lo anterior devolvería una salida similar a la siguiente:

getfacl: Eliminando '/' inicial en nombres de ruta absolutos
# file: home/fulano
# owner: fulano
# group: fulano
user::rwx
user:perengano:rwx
user:zutano:r-x
group::---
mask::rwx
other::---
default:user::rwx
default:user:perengano:rwx
default:user:zutano:r-x
default:group::---
default:mask::rwx
default:other::---

Asignando permisos de forma descendente.

Para aplicar los permisos de forma descendente, se ejecuta setfacl con la opción -R (mayúscula), la opción -m, [u,g,o]:[usuario,grupo]:[r,w,X,x] y la ruta del directorio como argumento. Ejemplo:

setfacl -R -m u:zutano:rX /home/fulano
setfacl -R -m u:perengano:rwX /home/fulano

Lo utilizó X mayúscula para indicar que sólo se aplicará el bit de acceso a directorios evitando aplicar el bit de ejecución a los archivos.

📝 Nota. También se puede simplificar todo lo anterior en una única operación:

setfacl -R -m u:zutano:rX,u:perengano:rwX /home/fulano

En este caso se utilizó X mayúscula para indicar que sólo se aplicará el bit de acceso a directorios, pero evitando aplicar el bit de ejecución a los archivos.

Lo anterior asignaría permisos r-x para el usuario zutano y rwx para el usuario perengano sobre el directorio /home/fulano y todo su contenido, pero aplicando sólo el bit de acceso a directorios y evitando asignar bit de ejecución a los archivos.

Eliminar permisos asignados por listas de control de acceso.

Para eliminar los permisos de un usuario en particular de la lista de control de acceso de un directorio en particular, se ejecuta setfacl con la opción -x, el nombre del usuario o grupo y la ruta del directorio como argumento. Ejemplo:

setfacl -x perengano /home/fulano

Para hacer lo mismo, pero de forma descendente, se ejecuta setfacl con la opción -R (mayúscula), la opción -x, el nombre del usuario o grupo y la ruta del directorio como argumento. Ejemplo:

setfacl -R -x perengano /home/fulano

Para eliminar los permisos predeterminados en la lista de control de acceso, se ejecuta setfacl con la opción -k (--remove-default) y la ruta del directorio como argumento. Ejemplo:

setfacl -k /home/fulano

Para eliminar todos los permisos en la lista de control de acceso, dejando todo como en el punto inicial, se ejecuta setfacl con la opción -b (--remove-all) y la ruta del directorio como argumento. Ejemplo:

setfacl -b /home/fulano

Para hacer lo mismo, pero de forma descendente, se ejecuta setfacl con la opción -R (mayúscula), la opción -b (--remove-all) y la ruta del directorio como argumento. Ejemplo:

setfacl -R -b /home/fulano

Copiar listas de control de acceso.

Para copiar la lista de control de acceso de un archivo y aplicarla en otro, se ejecuta:

getfacl archivo1 | setfacl --set-file=- archivo2

Para copiar la lista de control de acceso principal como la lista de control de acceso predeterminada, se ejecuta:

getfacl --access /home/fulano | setfacl -d -M- /home/fulano

Conclusión.

Utilizar las Listas de Control de Acceso (ACL) permite una gestión de permisos en el sistema de archivos mucho más precisa y granular que la proporcionada por los permisos tradicionales de usuario/grupo/otros. Como se ha visto en este documento, los ACL otorgan a los administradores del sistema las siguientes capacidades clave:

Las herramientas getfacl —para consulta— y setfacl —para modificación— son, por tanto, componentes esenciales para una administración avanzada y segura de sistemas Linux, especialmente en entornos multiusuario donde se requiere un control de acceso fino sobre los recursos compartidos.