Al implementarse con ZFS, las ACL se componen de una matriz de entradas de ACL. ZFS proporciona un modelo de ACL puro en el que todos los archivos disponen de una ACL. Normalmente, las ACL son triviales en el sentido de que únicamente representan las entradas de UNIX owner/group/other tradicionales.
Si cambia los permisos del archivo, su ACL se actualiza en consonancia. Además, si elimina una ACL no trivial que concedía a un usuario acceso a un archivo o directorio, ese usuario quizá siga disponiendo de acceso gracias a los bits de permisos del archivo o directorio que conceden acceso al grupo o a todos los usuarios. Todas las decisiones de control de acceso se supeditan a los permisos representados en una ACL de archivo o directorio.
A continuación se proporcionan las reglas principales de acceso de ACL de un archivo ZFS:
ZFS procesa entradas de ACL en el orden que figuran en la ACL, de arriba abajo.
Sólo se procesan entradas de ACL que tengan a "alguien" que coincida con quien solicita acceso.
Una vez se concede un permiso allow, una entrada deny de ACL posterior no lo puede denegar en el mismo conjunto de permisos de ACL.
El permiso write_acl se concede de forma incondicional al propietario del archivo aunque el permiso se deniegue explícitamente. De lo contrario, se deniega cualquier permiso que no quede especificado.
Con permisos deny o cuando falta un permiso de acceso para un archivo, el subsistema de privilegios determina la solicitud de acceso que se concede al propietario del archivo o superusuario. Es un mecanismo para permitir que los propietarios de archivos siempre puedan acceder a sus archivos y que los superusuarios puedan modificar archivos en situaciones de recuperación.
Si en un directorio se establece una ACL no trivial, los directorios secundarios no heredan la ACL de manera automática. Si se establece una ACL no trivial y desea que la hereden los directorios secundarios, debe utilizar los indicadores de herencia de ACL. Para obtener más información, consulte la Tabla 8–3 y Establecimiento de herencia de ACL en archivos ZFS en formato detallado.
Al crear un archivo, y en función del valor umask, se aplica una ACL similar a la siguiente:
$ ls -v file.1 -rw-r--r-- 1 root root 206663 May 20 14:09 file.1 0:owner@:execute:deny 1:owner@:read_data/write_data/append_data/write_xattr/write_attributes /write_acl/write_owner:allow 2:group@:write_data/append_data/execute:deny 3:group@:read_data:allow 4:everyone@:write_data/append_data/write_xattr/execute/write_attributes /write_acl/write_owner:deny 5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow |
Cada categoría de usuario (owner@!, group@!, everyone@!) tiene dos entradas de ACL en este ejemplo. Una entrada es para los permisos deny y otra para los permisos allow.
A continuación se proporciona una descripción de la ACL de este archivo:
Se deniega al propietario el permiso de ejecución del archivo (execute:deny ).
El propietario puede leer y modificar el contenido del archivo ( read_data/write_data/append_data). También puede modificar atributos del archivo como indicaciones de hora, atributos extendidos y ACL (write_xattr/write_attributes /write_acl). Además, puede modificar la propiedad del archivo (write_owner:allow).
Se deniegan al grupo permisos de modificación y ejecución del archivo (write_data/append_data/execute:deny).
Se conceden al grupo permisos de lectura del archivo (read_data:allow ).
Se deniegan a quien no sea propietario del archivo o miembro del grupo propietario los permisos de ejecución o modificación del contenido del archivo, y de modificación de sus atributos (write_data/append_data/write_xattr/execute/write_attributes/write_acl/write_owner:deny ).
Se conceden a quien no sea propietario del archivo o miembro del grupo propietario permisos de lectura del archivo y de sus atributos (read_data/read_xattr/read_attributes/read_acl/synchronize:allow ). El permiso de acceso synchronize no está implementado en la actualidad.
Al crear un directorio, y en función del valor umask, se aplica una ACL de directorio predeterminada similar a la siguiente:
$ ls -dv dir.1 drwxr-xr-x 2 root root 2 May 20 14:11 dir.1 0:owner@::deny 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/write_xattr/execute/write_attributes/write_acl /write_owner:allow 2:group@:add_file/write_data/add_subdirectory/append_data:deny 3:group@:list_directory/read_data/execute:allow 4:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr /write_attributes/write_acl/write_owner:deny 5:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow |
A continuación se proporciona una descripción de esta ACL de directorio:
La lista de deny del propietario está vacía para el directorio (::deny).
El propietario puede leer y modificar el contenido del directorio (list_directory/read_data/add_file/write_data/add_subdirectory/append_data ), buscar en el contenido (execute) y modificar atributos del archivo como indicaciones de hora, atributos extendidos y ACL (write_xattr/write_attributes/write_acl). Además, puede modificar la propiedad del directorio (write_owner:allow).
El grupo no puede agregar ni modificar contenido del directorio ( add_file/write_data/add_subdirectory/append_data:deny).
El grupo puede agrupar y leer el contenido del directorio. Además, tiene permisos de ejecución para buscar en el contenido del directorio (list_directory/read_data/execute:allow).
Se deniega a quien no sea propietario del archivo o miembro del grupo propietario el permiso de adición o modificación del contenido del directorio (add_file/write_data/add_subdirectory/append_data). Además se deniega el permiso para modificar atributos del directorio (write_xattr/write_attributes/write_acl/write_owner:deny).
Se conceden a quien no sea propietario del archivo o miembro del grupo propietario permisos de lectura y ejecución del contenido del directorio y sus atributos (list_directory/read_data/read_xattr/execute/read_attributes/read_acl/synchronize:allow ). El permiso de acceso synchronize no está implementado en la actualidad.