Guía de administración de Oracle Solaris 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