Guía de administración de Oracle Solaris ZFS

Establecimiento y visualización de ACL en archivos ZFS en formato compacto

En archivos ZFS puede establecer y visualizar permisos en un formato compacto que utiliza 14 caracteres exclusivos para representar los permisos. Las letras que representan los permisos compactos se detallan en la Tabla 8–2 y la Tabla 8–3.

Puede visualizar listas de ACL en formato compacto para archivos y directorios mediante el comando ls -V. Por ejemplo:


# ls -V file.1
-rw-r--r--   1 root     root      206663 Jun 17 10:07 file.1
            owner@:--x-----------:------:deny
            owner@:rw-p---A-W-Co-:------:allow
            group@:-wxp----------:------:deny
            group@:r-------------:------:allow
         everyone@:-wxp---A-W-Co-:------:deny
         everyone@:r-----a-R-c--s:------:allow

Esta salida ACL compacta se describe de este modo:

owner@

Se deniegan al propietario permisos de ejecución en el archivo (x= execute).

owner@

El propietario puede leer y modificar el contenido del archivo ( rw=read_data/write_data, p= append_data). Asimismo, puede modificar atributos del archivo como indicaciones de hora, atributos extendidos y ACL (A=write_xattr, W=write_attributes y C=write_acl). Además, el propietario puede modificar la propiedad del archivo (o=write_owner).

group@

Se deniegan al grupo los permisos de modificación y ejecución del archivo (write_data, p=append_data y x=execute).

group@

Se conceden al grupo permisos de ejecución en el archivo (r= read_data).

everyone@

Se deniega a quien no sea propietario del archivo o miembro del grupo propietario el permiso de ejecución o modificación del contenido del archivo y de cualquiera de sus atributos (w= write_data, x=execute, p =append_data, A=write_xattr , W=write_attributes, C= write_acl y o=write_owner).

everyone@

Quien no sea propietario del archivo o miembro del grupo propietario del archivo y sus atributos (r= read_data, a=append_data, R=read_xattr, c=read_acl y s=synchronize). El permiso de acceso synchronize no está implementado en la actualidad.

El formato compacto de ACL presenta las ventajas siguientes respecto al formato detallado:

Para obtener información sobre el uso del formato de ACL detallado, consulte Establecimiento y visualización de ACL en archivos ZFS en formato detallado.


Ejemplo 8–10 Establecimiento y visualización de las ACL en formato compacto

En el ejemplo siguiente, existe una ACL trivial en file.1:


# ls -V file.1
-rw-r--r--   1 root     root      206663 Jun 17 10:07 file.1
            owner@:--x-----------:------:deny
            owner@:rw-p---A-W-Co-:------:allow
            group@:-wxp----------:------:deny
            group@:r-------------:------:allow
         everyone@:-wxp---A-W-Co-:------:deny
         everyone@:r-----a-R-c--s:------:allow

En el ejemplo siguiente, se agregan permisos read_data/execute para el usuario gozer en file.1:


# chmod A+user:gozer:rx:allow file.1
# ls -V file.1
-rw-r--r--+  1 root     root      206663 Jun 17 10:07 file.1
        user:gozer:r-x-----------:------:allow
            owner@:--x-----------:------:deny
            owner@:rw-p---A-W-Co-:------:allow
            group@:-wxp----------:------:deny
            group@:r-------------:------:allow
         everyone@:-wxp---A-W-Co-:------:deny
         everyone@:r-----a-R-c--s:------:allow

Una forma alternativa de agregar los mismos permisos para el usuario gozer consiste en insertar una ACL nueva en una posición determinada, por ejemplo 4. Así se desplazan hacia abajo las posiciones ya existentes entre la 4 y la 6. Por ejemplo:


# chmod A4+user:gozer:rx:allow file.1
# ls -V file.1
-rw-r--r--+  1 root     root      206663 Jun 17 10:16 file.1
            owner@:--x-----------:------:deny
            owner@:rw-p---A-W-Co-:------:allow
            group@:-wxp----------:------:deny
            group@:r-------------:------:allow
        user:gozer:r-x-----------:------:allow
         everyone@:-wxp---A-W-Co-:------:deny
         everyone@:r-----a-R-c--s:------:allow

En el ejemplo siguiente, al usuario gozer se le conceden permisos de lectura, escritura y ejecución que se heredan para archivos y directorios recientemente creados.


# chmod A+user:gozer:rwx:fd:allow dir.2
# ls -dV dir.2
drwxr-xr-x+  2 root     root           2 Jun 17 10:19 dir.2
        user:gozer:rwx-----------:fd----:allow
            owner@:--------------:------:deny
            owner@:rwxp---A-W-Co-:------:allow
            group@:-w-p----------:------:deny
            group@:r-x-----------:------:allow
         everyone@:-w-p---A-W-Co-:------:deny
         everyone@:r-x---a-R-c--s:------:allow

También puede cortar y pegar indicadores de herencia y permisos de la salida de ls -V en el formato compacto de chmod. Por ejemplo, para duplicar los permisos e indicadores de herencia en el directorio dir.2 del usuario gozer para el usuario cindys en dir.2, copie y pegue los permisos y los indicadores de herencia (rwx-----------:fd----:allow) en el comando chmod como se indica a continuación:


# chmod A+user:cindys:rwx-----------:fd----:allow dir.2
# ls -dV dir.2
drwxr-xr-x+  2 root     root           2 Jun 17 10:19 dir.2
       user:cindys:rwx-----------:fd----:allow
        user:gozer:rwx-----------:fd----:allow
            owner@:--------------:------:deny
            owner@:rwxp---A-W-Co-:------:allow
            group@:-w-p----------:------:deny
            group@:r-x-----------:------:allow
         everyone@:-w-p---A-W-Co-:------:deny
         everyone@:r-x---a-R-c--s:------:allow


Ejemplo 8–11 Herencia de ACL con la propiedad aclinherit establecida en passthrough

Un sistema de archivos que tiene la propiedad aclinherit establecida en passthrough hereda todas las entradas ACL que se pueden heredar sin que se les apliquen modificaciones al heredarlas. Si la propiedad se establece en passthrough, los archivos se crean con permisos determinados por las entradas de control de acceso que se pueden heredar. Si no existen entradas de control de acceso que se puedan heredar y que afecten a los permisos, los permisos se configurarán de acuerdo con los solicitados desde la aplicación.

Los ejemplos siguientes utilizan sintaxis de ACL compacta para mostrar cómo heredar permisos estableciendo la propiedad aclinherit en passthrough.

En este ejemplo hay una ACL establecida en el directorio test1.dir para la forzar la herencia. La sintaxis crea una entrada ACL owner@, group@ y everyone@ para cada archivo recién creado. Los directorios que cree heredan una entrada ACL @owner, group@ y everyone@. Asimismo, los directorios heredan otras seis entradas de control de acceso que propagan las entradas de control de acceso a los directorios y archivos que se creen.


# zfs set aclinherit=passthrough tank/cindys
# pwd
/tank/cindys
# mkdir test1.dir

# chmod A=owner@:rwxpcCosRrWaAdD:fd:allow,group@:rwxp:fd:allow,everyone@::fd:allow 
test1.dir
# ls -Vd test1.dir
drwxrwx---+  2 root     root           2 Jun 17 10:37 test1.dir
            owner@:rwxpdDaARWcCos:fd----:allow
            group@:rwxp----------:fd----:allow
         everyone@:--------------:fd----:allow

En este ejemplo, un archivo recién creado hereda la ACL especificada para heredarse en los archivos recién creados.


# cd test1.dir
# touch file.1
# ls -V file.1
-rwxrwx---+  1 root     root           0 Jun 17 10:38 file.1
            owner@:rwxpdDaARWcCos:------:allow
            group@:rwxp----------:------:allow
         everyone@:--------------:------:allow

En este ejemplo, un directorio que se cree hereda tanto las entradas que controlan el acceso a este directorio como las entradas de control de acceso para la futura propagación a los elementos secundarios del directorio que se cree.


# mkdir subdir.1
# ls -dV subdir.1
drwxrwx---+  2 root     root           2 Jun 17 10:39 subdir.1
            owner@:rwxpdDaARWcCos:fdi---:allow
            owner@:rwxpdDaARWcCos:------:allow
            group@:rwxp----------:fdi---:allow
            group@:rwxp----------:------:allow
         everyone@:--------------:fdi---:allow
         everyone@:--------------:------:allow

Las entradas -di-- y f-i--- propagan la herencia y no se tienen en cuenta durante el control de acceso. En este ejemplo, se crea un archivo con una ACL trivial en otro directorio en el que no haya entradas de control de acceso heredadas.


# cd /tank/cindys
# mkdir test2.dir
# cd test2.dir
# touch file.2
# ls -V file.2
-rw-r--r--   1 root     root           0 Jun 17 10:40 file.2
            owner@:--x-----------:------:deny
            owner@:rw-p---A-W-Co-:------:allow
            group@:-wxp----------:------:deny
            group@:r-------------:------:allow
         everyone@:-wxp---A-W-Co-:------:deny
         everyone@:r-----a-R-c--s:------:allow


Ejemplo 8–12 Herencia de ACL con la propiedad aclinherit establecida en passthrough-x

Cuando la propiedad aclinherit está establecida en passthrough-x , los archivos se crean con el permiso de ejecución (x) para owner@, group@ o everyone@, pero sólo si el permiso de ejecución se establece en modo de creación de archivos y una ACE heredable que afecta al modo.

El siguiente ejemplo muestra cómo se heredan los permisos de ejecución estableciendo la propiedad aclinherit en passthrough-x.


# zfs set aclinherit=passthrough-x tank/cindys

La siguiente ACL se ha establecido en /tank/cindys/test1.dir para proporcionar herencia de ACL ejecutable para los archivos de owner@, group@ y everyone@.


# chmod A=owner@:rwxpcCosRrWaAdD:fd:allow,group@:rwxp:fd:allow,everyone@::fd:allow test1.dir
# ls -Vd test1.dir
drwxrwx---+  2 root     root           2 Jun 17 10:41 test1.dir
            owner@:rwxpdDaARWcCos:fd----:allow
            group@:rwxp----------:fd----:allow
         everyone@:--------------:fd----:allow

Un archivo (file1) se crea con permisos solicitados 0666. Los permisos resultantes son 0660. El permiso de ejecución no se ha heredado porque el modo de creación no lo solicitó.


# touch test1.dir/file1
# ls -V test1.dir/file1
-rw-rw----+  1 root     root           0 Jun 17 10:42 test1.dir/file1
            owner@:rw-pdDaARWcCos:------:allow
            group@:rw-p----------:------:allow
         everyone@:--------------:------:allow

A continuación, se generará un ejecutable llamado t mediante el compilador cc en el directorio testdir.


# cc -o t t.c
# ls -V t
-rwxrwx---+  1 root     root        7396 Jun 17 10:50 t
                 owner@:rwxpdDaARWcCos:------:allow
                 group@:rwxp----------:------:allow
              everyone@:--------------:------:allow

Los permisos resultantes son 0770 porque cc solicitó permisos 0777, que provocaron que el permiso de ejecución se heredara de las entradas owner@, group@ y everyone@.