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


Tal vez pueda interesarte


Compartí este artículo