Table of Contents

Configurar permisos predeterminados al crear archivos / carpetas (ACLs en GNU/Linux)

GNU/Linux no está limitado únicamente a permisos sobre un solo usuario y grupo, 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/o grupos de una forma más granulada. También es posible establecer permisos predeterminados para ficheros en determinados directorios. El soporte de ACLs viene habilitado de modo predeterminado en Arch, CentOS, Fedora™, Red Hat™ Enterprise Linux, openSUSE™ y SUSE™ Linux Enterprise.

# En el fichero /etc/fstab se puede usar la opción acl. Pero suele estar activada de manera predeterminada. Para desactivar las ACLs se dispone de la opción "noacl".
# Linea de comandos
mount -o remount,acl,user_xattr / 
mount -o remount,acl,user_xattr /var 

Los ACLs se pueden configurar:

getfacl: Consulta las ACLs de un fichero / directorio.

setfacl: Crea / modificar ACLs de un fichero dado.

NOTA: Si el fichero es borrado por root y luego se genera otro con el mismo nombre, este no mantendrá la ACL, lo mismo pasaría si se usara el comando mv. Pero si por el contrario fue sobrescrito con cp, este mantendrá activa la ACL.

Formato de entrada

Permisos por usuario, si no especifican usa los del propietario.

[d[efault]:] [u[ser]:]uid [:perms]

Permisos por grupo, si no especifican usa los del grupo de propietario.

[d[efault]:] g[roup]:gid [:perms]

Permisos para los otros.

[d[efault]:] o[ther][:] [:perms]

Máscara: Configura la máscara de derechos efectivos. La máscara por defecto es la unión de todos los permisos del grupo propietario y todas las entradas del usuario y grupo. Si la máscara es modificada y tiene unos permisos más restrictivos que los permisos de usuario y grupo, la máscara tiene prioridad. Si esto sucediera, al usar “getfacl” se indicarían los permisos efectivos mediante “effective:r–” (ej. solo lectura).

[d[efault]:] m[ask][:] [:perms]

Si no se especifica usuario o grupo es como si se definieran los dos, los permisos establecidos serán tanto para usuario como para grupo. Se pueden establecer varias definiciones separadas por comas. el uid / gid se puede especificar por su número o bien por el nombre.

NOTA: La máscara define los privilegios efectivos para usuario y grupo, si se estableció lectura y escritura anteriormente pero la máscara define solo lectura, el permiso de escritura queda anulado. Lo definido en la máscara es sobrescrito cada vez que se modifica un privilegio en grupo o usuario, por lo que debe usarse siempre al final. Al ejecutar el comando “getfalc” podremos ver la sección “effective”, ahí se ve los permisos efectivos que se tienen, de no tener ninguno es señal de configuraciones sin sentido.

setfacl opciones

getflacl opciones

NOTA: Con predeterminado se refiere a los privilegios que se establecerán automáticamente al crear dentro de esos directorios ficheros o carpetas.

setfacl -R -m g:jasmin:w prueba/prueba1/fichero2
 
ls -lt prueba/prueba1/fichero2 
-rw-rw-r--+ 1 root root 39 Okt 12 23:30 prueba/prueba1/fichero2
 
getfacl  prueba/prueba1/fichero2
file: prueba/prueba1/fichero2
# owner: root
# group: root
user::rw-
group::r--
group:jasmin:-w-
mask::rw-
other::r--

NOTA: Para personalizar el GID predeterminado al crear ficheros / directorios en GNU/Linux se puede usar el SGID (Leer).

Establecer en un directorio y sus ficheros ACLs predeterminadas

Estos dos comandos hacen lo mismo.

setfacl -R -d -m u:games:x prueba
setfacl -R -m d:u:games:x prueba 

Acceso de lectura para el usuario lisa

setfacl -m u:lisa:r file

Eliminando el permiso de lectura anteriormente establecido mediante máscara

No se especifica usuario ni grupo.

setfacl -m m::rx file

Eliminando la ACL del grupo jasmin y la máscara

setfacl -x g:jasmin file
setfacl -x m:: file

Copiando las ACL de un fichero y aplicándolas a otro

getfacl file1 | setfacl --set-file=- file2

Copia las ACLs de un directorio y las establece como predeterminadas en otro

 getfacl --access dir | setfacl -d -M- dir

Crear backup de una carpeta (también su contenido) y restablecerlo posteriormente

getfacl -R dir > ACLbackup
setfacl --restore= ACLbackup

Configuración de máscara sin sentido (effective:---)

getfacl -c prueba/caca3 
user::rw-
user:games:r--                  #effective:---
group::r--                      #effective:---
mask::--x
other::r--

Otra herramienta de interés complementaria a ACL

Recomendación de interés en relación al post: chattr

Enlace de interés.