Cette section contient des exemples de délégation et d'affichage de droits ZFS délégués.
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 |
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 |
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.
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 |
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 |
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 :
Jeux de droits
Droits spécifiques ou droits à la création
Jeu de données local
Jeux de données locaux et descendants
Jeux de données descendants uniquement
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 |
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 :
Deux jeux de droits sont définis :
@eng (create, destroy, snapshot, mount, clone, promote, rename)
@simple (create, mount)
Les droits à la création sont définis pour le jeu de droits @eng et la propriété mountpoint. "À la création" signifie qu'une fois qu'un jeu de données est créé, le jeu de droits @eng et la propriété mountpoint sont accordés.
Le jeu de droits @eng est accordé à l'utilisateur tom et les droits create, destroy et mount pour les systèmes de fichiers locaux sont accordés à l'utilisateur joe.
Le jeu de droits @basic, ainsi que les droits share et rename pour les systèmes de fichiers locaux et descendants sont accordés à l'utilisateur fred.
Le jeu de droits @basic pour les systèmes de fichiers descendants uniquement est accordé à l'utilisateur barney et au groupe staff.
Pour le système de fichiers pool :
Le jeu de droits @simple (create, destroy, mount) est défini.
Le jeu de droits sur le système de fichiers local @simple est accordé au groupe staff.
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 ------------------------------------------------------------------------------ |
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 ------------------------------------------------------------- |