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.
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.
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
Todos los procedimientos descritos a continuación —salvo que se indique lo contrario— se realizarán como root.
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:
getfacl: Se utiliza para determinar los permisos establecidos en las listas de control de acceso de un archivo o directorio dado.setfacl: Se utiliza para cambiar los permisos en las listas de control de acceso de un archivo o directorio dado.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
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.
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
Es importante destacar las opciones de setfacl pues son relevantes para cualquier procedimiento.
-m --modify: Indica que se modificará el ACL de un directorio.-M --modify-file: Indica que se modificará el ACL de un archivo.-x --remove: Indica que se eliminará el ACL de un directorio.-X --remove-file: Indica que se eliminará el ACL de un archivo.-b --remove-all: Indica que se eliminarán todos los ACL de un archivo o directorio.-k --remove-default: Indica que se eliminarán todos los ACL predeterminado de un archivo o directorio.--mask: Fuerza el cálculo de la máscara de los permisos efectivos de un ACL, aún si se ha proporcionado una de manera explícita.--d --default: Todas las operaciones se aplican sólo en el ACL predeterminado.--restore=archivo: Restaura un respaldo de permisos de un ACL obtenidos con getfacl -R.-R: Aplica los cambios de ACL de modo descendente en un directorio.-L --logical: Al aplicar los cambios de ACL de modo descendente en un directorio, se hace de modo lógico siguiendo enlaces simbólicos.-P --physical: Al aplicar los cambios de ACL de modo descendente en un directorio, se hace de modo físico sin seguir enlaces simbólicos.--test: Modo de pruebas. En lugar de cambiar los ACL de los archivos o directorios, sólo se listan los resultados.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::---
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/fulanoY además simplificar todo lo anterior en una sola operación:
setfacl -m d:u:zutano:5,d:u:perengano:7 /home/fulanoPara verificar todo lo anterior, se ejecuta de nuevo
getfaclcon la ruta del directorio modificado como argumento:getfacl /home/fulanoLo 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::---
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/fulanoEn este caso se utilizó
Xmayú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-xpara el usuariozutanoyrwxpara el usuarioperenganosobre el directorio/home/fulanoy todo su contenido, pero aplicando sólo el bit de acceso a directorios y evitando asignar bit de ejecución a los archivos.
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
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
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:
r), escritura (w) y ejecución/acceso (x/X) a usuarios y grupos adicionales sobre un mismo archivo o directorio.default) en los directorios, que se heredarán automáticamente por los nuevos archivos y subdirectorios creados en su interior.-R) sobre árboles de directorios completos.getfacl y setfacl.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.