Guide d'administration Oracle Solaris ZFS

Utilisation de l'administration déléguée de ZFS

Cette section contient des exemples de délégation et d'affichage de droits ZFS délégués.

Délégation de droits ZFS (exemples)


Exemple 9–1 Délégation de droits à un utilisateur individuel

Lorsque vous accordez les droits create et mount à un utilisateur individuel, vous devez vous assurer que cet utilisateur dispose de droits sur le point de montage sous-jacent.

Pour accorder par exemple à l'utilisateur marks les droits create et mount sur tank, définissez au préalable ces droits :


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

Utilisez ensuite la commande zfs allow pour accorder les droits create, destroy et mount. Exemple :


# zfs allow marks create,destroy,mount tank

L'utilisateur marks peut dorénavant créer ses propres systèmes de fichiers dans le système de fichiers tank. Exemple :


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


Exemple 9–2 Délégation des droits de création (create) et de destruction (destroy) à un groupe

L'exemple suivant illustre la configuration d'un système de fichiers pour que tout membre du groupe staff puisse créer et monter des systèmes de fichiers dans le système de fichiers tank, ainsi que détruire ses propres systèmes de fichiers. Toutefois, les membres du groupe staff ne sont pas autorisés à détruire les systèmes de fichiers des autres utilisateurs.


# 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


Exemple 9–3 Délégation de droits au niveau approprié d'un système de fichiers

Assurez-vous d'accorder les droits aux utilisateurs au niveau approprié du système de fichiers. Par exemple, les droits create, destroy et mount pour les systèmes de fichiers locaux et descendants sont accordés à l'utilisateur marks. Le droit local de prendre un instantané du système de fichiers tank a été accordé à l'utilisateur marks, mais pas celui de prendre un instantané de son propre système de fichiers. Le droit snapshot ne lui donc a pas été accordé au niveau approprié du système de fichiers.


# 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

Pour accorder à l'utilisateur marks ce droit au niveau des descendants, utilisez l'option zfs allow - d. Exemple :


# 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

L'utilisateur marks ne peut maintenant créer un instantané qu'à un niveau inférieur à tank.



Exemple 9–4 Définition et utilisation de droits délégués complexes

Vous pouvez accorder des droits spécifiques à des utilisateurs ou des groupes. Par exemple, la commande zfs allow suivante accorde des droits spécifiques au groupe staff. En outre, les droits destroy et snapshot sont accordés après la création de systèmes de fichiers 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
-------------------------------------------------------------

Étant donné que l'utilisateur marks est membre du groupe staff, il peut créer des systèmes de fichiers dans tank. En outre, l'utilisateur marks peut créer un instantané de tank/marks2 parce qu'il dispose des droits spécifiques pour le faire. Exemple :


# 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
-------------------------------------------------------------

Il ne peut par contre pas créer d'instantané dans tank/marks parce qu'il ne dispose pas des droits spécifiques pour le faire. Exemple :


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

Si vous disposez des droits create dans votre répertoire personnel, vous pouvez créer vos propres répertoires d'instantanés. Ce scénario s'avère utile lorsque votre système de fichiers est monté sur un système NFS. Exemple :


$ 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


Exemple 9–5 Définition et utilisation d'un jeu de droits délégué ZFS

L'exemple suivant illustre la création d'un jeu de droits intitulé @myset et, accorde ce jeu de droits ainsi que le droit de renommage au groupe staff pour le système de fichiers tank. L'utilisateur cindys, membre du groupe staff, a le droit de créer un système de fichiers dans tank. Par contre, l'utilisateur lp ne dispose pas de ce droit de création de systèmes de fichiers dans 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

Affichage des droits ZFS délégués (exemples)

Vous pouvez vous servir de la commande suivante pour afficher les droits :


# zfs allow dataset

Cette commande affiche les droits définis ou accordés à ce jeu de données. La sortie contient les composants suivants :


Exemple 9–6 Affichage des droits d'administration déléguée de base

La sortie suivante de cet exemple indique que l'utilisateur cindys dispose des droits de création, de destruction, de montage et d'instantané dans le système de fichiers tank/cindys.


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


Exemple 9–7 Affichage des droits d'administration déléguée complexes

La sortie de cet exemple indique les droits suivants sur les systèmes de fichiers pool/fred et pool.

Pour le système de fichiers pool/fred :

Pour le système de fichiers pool :

La sortie de cet exemple est la suivante :


$ 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
------------------------------------------------------------------------------

Suppression de droits ZFS (exemples)

Vous pouvez utiliser la commande zfs unallow pour supprimer des droits accordés. Par exemple, l'utilisateur cindys a le droit de créer, détruire, monter et réaliser des instantanés dans le système de fichiers 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 syntaxe suivante de la commande zfs unallow supprime le droit de réaliser des instantanés du système de fichiers tank/cindys accordé à l'utilisateur 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

Autre exemple : l'utilisateur marks dispose des droits suivants dans tank/marks :


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

Dans cet exemple, la syntaxe suivante de la commande zfs unallow supprime tous les droits accordés à l'utilisateur marks pour tank/marks:


# zfs unallow marks tank/marks

La syntaxe suivante de la commande zfs unallow supprime un jeu de droits sur le système de fichiers 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
-------------------------------------------------------------