Anteriormente expliqué cómo funcionan las ACLs Posix en Linux y cómo se utilizan, en esta oportunidad voy a demostrar cómo habilitarlas en un sistema de archivos ZFS de un servidor GNU/Linux.
Las ACLs (listas de control de acceso) permiten especificar permisos de acceso sobre archivos y directorios de forma mucho más flexible que el sistema tradicional de Unix (usuario/grupo/otros).
Un servidor Debian posee un pool ZFS ("z01") con dos sistemas de archivos ("backups" y "datos"):
root@debian:~# zfs list NAME USED AVAIL REFER MOUNTPOINT z01 6,69G 41,6G 24K /z01 z01/backups 24K 41,6G 24K /backups z01/datos 6,68G 41,6G 6,68G /usr/local/datos
De acuerdo a la salida de mount
, el sistema está montado sin soporte para ACLs (noacl
):
root@debian:~# mount | grep datos z01/datos on /usr/local/datos type zfs (rw,noatime,xattr,noacl)
A su vez, es posible comprobar que el sistema de archivos tiene las ACLs deshabilitadas (propiedad ZFS acltype
seteada en "off"):
root@debian:~# zfs get acltype z01/datos NAME PROPERTY VALUE SOURCE z01/datos acltype off default
Lógicamente, al tratar de setear una ACL sobre dicho sistema de archivos, falla:
root@debian:~# setfacl -m user:emiliano:wrx /usr/local/datos/ setfacl: /usr/local/datos/: Operation not supported
Del manual de ZFS (man zfs
) se sabe que la propiedad acltype
soporta dos valores posibles: off/noacl
o posixacl
. Este último indica que se deben utilizar ACLs Posix (específicas de Linux) almacenadas como atributos extendidos e independientes de cualquier ACL NFSv4 que pudiera existir.
Por otro lado, el manual de ZFS dice que, a fin de obtener el máximo rendimiento cuando se utilizan ACLs Posix, se recomienda establecer la propiedad xattr
en "sa". Esto hace que las ACLs Posix sean almacenadas de forma más eficiente en disco.
Entonces, establecer ambos atributos utilizando el subcomando "set":
root@debian:~# zfs set xattr=sa z01/datos root@debian:~# zfs set acltype=posixacl z01/datos
Verificar:
root@debian:~# zfs get all z01/datos | grep "xattr\|acltype" z01/datos xattr sa local z01/datos acltype posixacl local
Inmediatamente es posible comenzar a utilizar ACLs en dicho sistema de archivos:
root@debian:~# setfacl -m user:emiliano:wrx /usr/local/datos/ root@debian:~# getfacl /usr/local/datos/ getfacl: Removing leading '/' from absolute path names # file: usr/local/datos/ # owner: root # group: root user::rwx user:emiliano:rwx group::r-x mask::rwx other::r-x
Al listar el directorio se observa el símbolo "+" indicando la presencia de ACLs sobre el mismo:
root@debian:~# ll -d /usr/local/datos/ drwxrwxr-x+ 4 root root 4 ago 30 09:06 /usr/local/datos/
Referencias