Guía de administración de Oracle Solaris ZFS

Uso de la administración delegada de ZFS

En esta sección se proporcionan ejemplos de delegación y visualización de permisos de ZFS.

Delegación de permisos ZFS (ejemplos)


Ejemplo 9–1 Delegación de permisos a un determinado usuario

Si concede los permisos create y mount a un determinado usuario, compruebe que dicho usuario disponga de permisos en el punto de montaje subyacente.

Por ejemplo, para proporcionar al usuario los permisos marks create y mount entank, primero establezca los permisos:


# chmod A+user:marks:add_subdirectory:fd:allow /tank

A continuación, utilice el comando zfs allow para conceder los permisos create , destroy y mount. Por ejemplo:


# zfs allow marks create,destroy,mount tank

El usuario marks ya puede crear sus propios sistemas de archivos en el sistema de archivos tank. Por ejemplo:


# su marks
marks$ zfs create tank/marks
marks$ ^D
# su lp
$ zfs create tank/lp
cannot create 'tank/lp': permission denied


Ejemplo 9–2 Delegación de los permisos create y destroy en un grupo

El ejemplo siguiente muestra cómo configurar un sistema de archivos de forma que cualquier integrante del grupo staff pueda crear y montar sistemas de archivos en el sistema de archivos tank, así como destruir sus propios sistemas de archivos. Ahora bien, los miembros del grupo staff no pueden destruir los sistemas de archivos de nadie más.


# zfs allow staff create,mount tank
# zfs allow -c create,destroy tank
# zfs allow tank
-------------------------------------------------------------
Create time permissions on (tank)
        create,destroy
Local+Descendent permissions on (tank)
        group staff create,mount
-------------------------------------------------------------
# su cindys
cindys% zfs create tank/cindys
cindys% exit
# su marks
marks% zfs create tank/marks/data
marks% exit
cindys% zfs destroy tank/marks/data
cannot destroy 'tank/mark': permission denied


Ejemplo 9–3 Delegación de permisos en el nivel correcto del sistema de archivos

Compruebe que conceda permisos a los usuarios en el nivel correcto del sistema de archivos. Por ejemplo, al usuario marks se le concede los permisos create, destroy y mount para los sistemas de archivos local y descendiente. Al usuario marks se le concede permiso local para crear una instantánea del sistema de archivos tank, pero no puede crear una instantánea de su propio sistema de archivos. Así pues, no se le ha concedido el permiso snapshot en el nivel correcto del sistema de archivos.


# zfs allow -l marks snapshot tank
# zfs allow tank
-------------------------------------------------------------
Local permissions on (tank)
        user marks snapshot
Local+Descendent permissions on (tank)
        user marks create,destroy,mount
-------------------------------------------------------------
# su marks
marks$ zfs snapshot tank/@snap1
marks$ zfs snapshot tank/marks@snap1
cannot create snapshot 'mark/marks@snap1': permission denied

Para conceder permiso al usuario marks en el nivel descendiente, utilice la opción zfs allow - d. Por ejemplo:


# zfs unallow -l marks snapshot tank
# zfs allow -d marks snapshot tank
# zfs allow tank
-------------------------------------------------------------
Descendent permissions on (tank)
        user marks snapshot
Local+Descendent permissions on (tank)
        user marks create,destroy,mount
-------------------------------------------------------------
# su marks
$ zfs snapshot tank@snap2
cannot create snapshot 'tank@snap2': permission denied
$ zfs snapshot tank/marks@snappy

El usuario marks ahora sólo puede crear una instantánea por debajo del nivel de tank.



Ejemplo 9–4 Definición y uso de permisos delegados complejos

Puede conceder permisos a usuarios o grupos. Por ejemplo, el siguiente comando zfs allow concede determinados permisos al grupo staff. Asimismo, se conceden los permisos destroy y snapshot una vez creados los sistemas de archivos de tank.


# zfs allow staff create,mount tank
# zfs allow -c destroy,snapshot tank
# zfs allow tank
-------------------------------------------------------------
Create time permissions on (tank)
        destroy,snapshot
Local+Descendent permissions on (tank)
        group staff create,mount
-------------------------------------------------------------

Debido a que el usuario marks pertenece al grupo staff, puede crear sistemas de archivos en tank. Además, el usuario marks puede crear una instantánea de tank/marks2 porque dispone de los correspondientes permisos para hacerlo. Por ejemplo:


# su marks
$ zfs create tank/marks2
$ zfs allow tank/marks2
-------------------------------------------------------------
Local permissions on (tank/marks2)
        user marks destroy,snapshot
-------------------------------------------------------------
Create time permissions on (tank)
        destroy,snapshot
Local+Descendent permissions on (tank)
        group staff create
        everyone mount
-------------------------------------------------------------

Sin embargo, no puede crear una instantánea de tank/marks porque carece de los correspondientes permisos. Por ejemplo:


$ zfs snapshot tank/marks2@snap1
$ zfs snapshot tank/marks@snappp
cannot create snapshot 'tank/marks@snappp': permission denied

Si dispone del permiso create en su directorio principal, puede crear directorios de instantáneas. Esta situación hipotética es útil si el sistema de archivos están montado por NFS. Por ejemplo:


$ cd /tank/marks2
$ ls
$ cd .zfs
$ ls
snapshot
$ cd snapshot
$ ls -l
total 3
drwxr-xr-x   2 marks    staff          2 Dec 15 13:53 snap1
$ pwd
/tank/marks2/.zfs/snapshot
$ mkdir snap2
$ zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank                   264K  33.2G  33.5K  /tank
tank/marks            24.5K  33.2G  24.5K  /tank/marks
tank/marks2             46K  33.2G  24.5K  /tank/marks2
tank/marks2@snap1     21.5K      -  24.5K  -
tank/marks2@snap2         0      -  24.5K  -
$ ls
snap1  snap2
$ rmdir snap2
$ ls
snap1


Ejemplo 9–5 Definición y uso de un conjunto de permisos delegados de ZFS

En el ejemplo siguiente se muestra cómo crear un conjunto de permisos @myset, conceder el grupo de permisos y cambiar el nombre del permiso para el grupo staff respecto al sistema de archivos tank. cindys, usuario del grupo staff, tiene permiso para crear un sistema de archivos en tank. Sin embargo, el usuario lp no tiene permiso para crear un sistema de archivos en tank.


# zfs allow -s @myset create,destroy,mount,snapshot,promote,clone,readonly tank
# zfs allow tank
-------------------------------------------------------------
Permission sets on (tank)
        @myset clone,create,destroy,mount,promote,readonly,snapshot
-------------------------------------------------------------
# zfs allow staff @myset,rename tank
# zfs allow tank
-------------------------------------------------------------
Permission sets on (tank)
        @myset clone,create,destroy,mount,promote,readonly,snapshot
Local+Descendent permissions on (tank)
        group staff @myset,rename
# chmod A+group:staff:add_subdirectory:fd:allow tank
# su cindys
cindys% zfs create tank/data
Cindys% zfs allow tank
-------------------------------------------------------------
Permission sets on (tank)
        @myset clone,create,destroy,mount,promote,readonly,snapshot
Local+Descendent permissions on (tank)
        group staff @myset,rename
-------------------------------------------------------------
cindys% ls -l /tank
total 15
drwxr-xr-x   2 cindys   staff          2 Aug  8 14:10 data
cindys% exit
# su lp
$ zfs create tank/lp
cannot create 'tank/lp': permission denied

Visualización de permisos delegados de ZFS

Para visualizar permisos puede utilizar el comando siguiente:


# zfs allow dataset

Este comando muestra los permisos que se establecen o permiten en este conjunto de datos. La salida contiene los componentes siguientes:


Ejemplo 9–6 Visualización de permisos de administración delegados básicos

La salida de este ejemplo indica que el usuario cindys tiene permisos para crear, destruir, montar y crear instantáneas en el sistema de archivos tank/cindys.


# zfs allow tank/cindys
       -------------------------------------------------------------
       Local+Descendent permissions on (tank/cindys)
               user cindys create,destroy,mount,snapshot


Ejemplo 9–7 Visualización de permisos de administración delegados complejos

La salida de este ejemplo indica los permisos siguientes en los sistemas de archivos pool/fred y pool.

Para el sistema de archivos pool/fred:

Para el sistema de archivos pool:

A continuación se muestra el resultado de este ejemplo:


$ zfs allow pool/fred
------------------------------------------------------------------------------
Permission sets on (pool/fred)
        @eng create,destroy,snapshot,mount,clone,promote,rename
        @simple create,mount
Create time permissions on (pool/fred)
        @eng,mountpoint
Local permissions on (pool/fred)
        user tom @eng
        user joe create,destroy,mount
Local+Descendent permissions on (pool/fred)
        user fred @basic,share,rename
Descendent permissions on (pool/fred)
        user barney @basic
        group staff @basic
------------------------------------------------------------------------------
Permission sets on (pool)
        @simple create,destroy,mount
Local permissions on (pool)
        group staff @simple
------------------------------------------------------------------------------

Eliminación de permisos ZFS (ejemplos)

El comando zfs unallow se usa para eliminar permisos concedidos. Por ejemplo, el usuario cindys tiene permisos para crear, destruir, montar y crear instantáneas en el sistema de archivos tank/cindys.


# zfs allow cindys create,destroy,mount,snapshot tank/cindys
       # zfs allow tank/cindys
       -------------------------------------------------------------
       Local+Descendent permissions on (tank/cindys)
               user cindys create,destroy,mount,snapshot
       -------------------------------------------------------------

La siguiente sintaxis de zfs unallow elimina el permiso para crear instantáneas del usuario cindys en el sistema de archivos tank/cindys:


# zfs unallow cindys snapshot tank/cindys
# zfs allow tank/cindys
-------------------------------------------------------------
Local+Descendent permissions on (tank/cindys)
        user cindys create,destroy,mount
-------------------------------------------------------------
cindys% zfs create tank/cindys/data
cindys% zfs snapshot tank/cindys@today
cannot create snapshot 'tank/cindys@today': permission denied

Otro ejemplo: el usuario marks tiene los permisos siguientes en el sistema de archivos tank/marks:


# zfs allow tank/marks
-------------------------------------------------------------
Local+Descendent permissions on (tank/marks)
        user marks create,destroy,mount
-------------------------------------------------------------

En este ejemplo, la siguiente sintaxis de zfs unallow elimina todos los permisos del usuario marks de tank/marks:


# zfs unallow marks tank/marks

La siguiente sintaxis de zfs unallow elimina un conjunto de permisos del sistema de archivos tank.


# zfs allow tank
-------------------------------------------------------------
Permission sets on (tank)
        @myset clone,create,destroy,mount,promote,readonly,snapshot
Create time permissions on (tank)
        create,destroy,mount
Local+Descendent permissions on (tank)
        group staff create,mount
-------------------------------------------------------------
# zfs unallow -s @myset tank
$ zfs allow tank
-------------------------------------------------------------
Create time permissions on (tank)
        create,destroy,mount
Local+Descendent permissions on (tank)
        group staff create,mount
-------------------------------------------------------------