Gestionar permisos en entornos Linux modernos puede ser un desafío. Los permisos tradicionales de usuario, grupo y otros a menudo resultan insuficientes. Necesitas un control más granular sobre archivos y directorios compartidos. Esto es especialmente cierto en sistemas complejos o colaborativos.
Aquí es donde entran en juego las Listas de Control de Acceso, o ACL. Las ACL te permiten definir permisos específicos para usuarios y grupos adicionales. Esto supera las limitaciones del modelo tradicional. Con ACLs, mejoras significativamente la seguridad y la flexibilidad en tu sistema.
Requisitos Previos: Instalación y Configuración
Antes de comenzar a trabajar con ACL, es importante verificar que tu sistema tenga todo lo necesario. En muchas distribuciones Linux, especialmente en instalaciones mínimas o de servidor, los paquetes ACL no vienen instalados por defecto.
Instalando las herramientas ACL
En Ubuntu/Debian:
sudo apt update
sudo apt install acl
En CentOS/RHEL/Rocky Linux:
sudo yum install acl
En Fedora:
sudo dnf install acl
En Arch Linux:
sudo pacman -S acl
Este paquete incluye los comandos esenciales getfacl y setfacl que utilizarás para gestionar las ACL.
Verificando el soporte del sistema de archivos
La mayoría de los sistemas de archivos modernos como ext4, XFS y Btrfs soportan ACL por defecto. Sin embargo, es importante verificar que tu partición esté montada con soporte ACL habilitado.
Para comprobar si una partición tiene soporte ACL, ejecuta:
mount | grep acl
Si tu sistema de archivos es ext4 y no ves la opción acl en la salida, puedes habilitarlo permanentemente editando /etc/fstab. Añade la opción acl a las opciones de montaje. Por ejemplo:
/dev/sda1 /home ext4 defaults,acl 0 2
Después, remonta la partición:
sudo mount -o remount /home
Para sistemas de archivos ext4 modernos, el soporte ACL suele estar habilitado por defecto a nivel del sistema de archivos, incluso si no aparece explícitamente en las opciones de montaje.
Entendiendo los Fundamentos de ACL
Las ACL extienden el modelo de permisos POSIX. Permiten asignar permisos a múltiples usuarios y grupos en un mismo archivo o directorio. Piensa en ellas como una capa adicional sobre los permisos estándar. Esta funcionalidad es crucial para entornos donde la colaboración es clave.
Visualizando ACLs con getfacl
Para ver los permisos ACL de un archivo o directorio, usa el comando getfacl. Este comando te mostrará la información de permisos estándar y también todas las entradas ACL configuradas.
getfacl archivo_ejemplo.txt
La salida te mostrará el propietario, el grupo y las entradas ACL existentes. Observa la sección de «user», «group» y «other», seguidas de las entradas específicas para usuarios y grupos adicionales. Si ves un signo más (+) junto a los permisos en un listado ls -l, significa que hay ACLs aplicadas a ese archivo o directorio.
Ejemplo de salida:
# file: archivo_ejemplo.txt
# owner: usuario
# group: grupo
user::rw-
user:desarrollador:rw-
group::r--
mask::rw-
other::r--
Configurando ACLs con setfacl
Añadir o modificar ACLs se hace con el comando setfacl. Puedes asignar permisos de lectura (r), escritura (w) y ejecución (x) a usuarios o grupos específicos. Es una herramienta potente para personalizar el acceso.
Para dar permisos de lectura y escritura a un usuario llamado desarrollador sobre un archivo:
setfacl -m u:desarrollador:rw archivo_proyecto.md
Aquí, -m significa modificar una entrada y u: especifica un usuario. Si necesitas modificar un grupo, usa g:.
Para revocar todos los permisos ACL de un usuario, puedes usar el flag -x:
setfacl -x u:desarrollador archivo_proyecto.md
Esto eliminará la entrada ACL para ese usuario.
Si un comando requiere permisos de root para modificar un archivo o directorio, usa sudo. Por ejemplo, para dar permisos a un grupo en un directorio del sistema:
sudo setfacl -m g:operaciones:rwx /var/log/aplicacion
Esto otorga al grupo operaciones permisos completos sobre el directorio /var/log/aplicacion. Asegúrate de que el usuario o grupo exista antes de aplicar la ACL.
Verificando que los cambios se aplicaron
Después de establecer una ACL, es buena práctica verificar los cambios:
getfacl archivo_proyecto.md
También puedes usar ls -l y buscar el signo + al final de los permisos:
ls -l archivo_proyecto.md
# -rw-rw-r--+ 1 usuario grupo 1234 ene 6 10:30 archivo_proyecto.md
Gestionando ACLs por Defecto en Directorios
Cuando trabajas con directorios compartidos, los permisos por defecto son cruciales. Puedes configurar ACLs por defecto para que los nuevos archivos y subdirectorios hereden permisos específicos. Esto simplifica enormemente la gestión de permisos en entornos dinámicos.
Para establecer una ACL por defecto que dé permisos de lectura y escritura a un usuario colaborador en un directorio:
setfacl -m d:u:colaborador:rw directorio_compartido/
El prefijo d: indica que es una entrada de ACL por defecto. Cualquier archivo o subdirectorio creado dentro de directorio_compartido/ heredará esta configuración. Esto asegura una consistencia automática en los permisos.
Para ver las ACLs por defecto de un directorio:
getfacl directorio_compartido/
Verás líneas que comienzan con default:, indicando los permisos que se aplicarán a los nuevos contenidos.
La Máscara de Permisos ACL
La máscara de permisos ACL es un concepto fundamental. Define los permisos máximos efectivos para las entradas ACL de usuarios y grupos nombrados. Es un filtro que limita lo que una ACL puede realmente hacer. Asegúrate de entender su impacto.
Puedes ver la máscara con getfacl. Si una entrada ACL tiene rwx pero la máscara es r-x, los permisos efectivos serán r-x. La máscara a menudo se ajusta automáticamente cuando modificas ACLs. Sin embargo, puedes establecerla manualmente si es necesario:
setfacl -m m::rwx archivo.txt
Esto establece la máscara a lectura, escritura y ejecución. Ten cuidado al manipular la máscara directamente. Un valor incorrecto puede restringir más de lo esperado.
Casos Prácticos y Ejemplos Avanzados
Imagina un escenario donde varios equipos necesitan acceder a un mismo directorio de proyectos. Los equipos de desarrollo, QA y operaciones tienen diferentes requisitos de acceso. Con ACLs, puedes gestionar esto sin cambiar los grupos primarios de los usuarios.
Para dar al grupo qa solo acceso de lectura y ejecución a un directorio de scripts, y al grupo dev acceso completo:
sudo setfacl -m g:qa:r-x /opt/scripts_proyecto
sudo setfacl -m g:dev:rwx /opt/scripts_proyecto
Además, puedes establecer ACLs por defecto para que los nuevos scripts mantengan estos permisos:
sudo setfacl -m d:g:qa:r-x /opt/scripts_proyecto
sudo setfacl -m d:g:dev:rwx /opt/scripts_proyecto
Esto facilita la colaboración y el control de versiones. Los archivos recién creados dentro de /opt/scripts_proyecto heredarán los permisos definidos por defecto.
Otro caso común es permitir a un usuario específico la gestión de archivos en un directorio de otro usuario. Por ejemplo, el usuario admin_web necesita escribir en el directorio public_html del usuario juan:
sudo setfacl -m u:admin_web:rwx /home/juan/public_html
Esto evita tener que cambiar la propiedad del directorio o añadir a admin_web al grupo principal de juan. Ofrece una solución limpia y específica para el acceso necesario.
Aplicando ACLs recursivamente
Si necesitas aplicar ACLs a todos los archivos y subdirectorios existentes dentro de un directorio, usa la opción -R:
sudo setfacl -R -m u:desarrollador:rw /var/www/proyecto
Para aplicar tanto ACLs de acceso como ACLs por defecto de forma recursiva:
sudo setfacl -R -m u:desarrollador:rw /var/www/proyecto
sudo setfacl -R -m d:u:desarrollador:rw /var/www/proyecto
Eliminando todas las ACLs
Para eliminar todas las ACLs extendidas de un archivo o directorio, conservando solo los permisos básicos:
setfacl -b archivo.txt
Para hacerlo recursivamente:
setfacl -R -b directorio/
Copiando ACLs entre archivos
Puedes copiar las ACLs de un archivo a otro usando una combinación de getfacl y setfacl:
getfacl archivo_origen.txt | setfacl --set-file=- archivo_destino.txt
Esto es útil cuando quieres replicar una configuración de permisos compleja.
Solución de Problemas Comunes
Las ACLs no se están aplicando
- Verifica que el paquete
aclesté instalado - Asegúrate de que el sistema de archivos soporte ACL
- Comprueba que la partición esté montada con soporte ACL
- Verifica que el usuario o grupo especificado existe en el sistema
Los permisos efectivos son diferentes a los configurados
- Revisa la máscara de permisos con
getfacl - La máscara puede estar limitando los permisos efectivos
- Ajusta la máscara si es necesario con
setfacl -m m::rwx
Las ACLs por defecto no se heredan
- Asegúrate de usar el prefijo
d:al configurar ACLs por defecto - Verifica que estás aplicando las ACLs al directorio, no a archivos individuales
- Los archivos existentes no se ven afectados, solo los nuevos
Conclusión
Las ACL ofrecen una capa de control de permisos superior en Linux. Superan las limitaciones de los permisos Unix tradicionales. Implementarlas mejora significativamente la seguridad y la gestión de recursos compartidos. Te proporcionan la flexibilidad que los entornos modernos exigen.
Dominar los comandos getfacl y setfacl te dará un gran poder. Aplica estos conocimientos para construir sistemas más robustos y seguros. Esto optimizará tus operaciones diarias. Las ACL son una herramienta indispensable para cualquier sysadmin.

