Guide d'administration Oracle Solaris ZFS

Chapitre 9 Administration déléguée de ZFS

Ce chapitre décrit la méthode d'utilisation de l'administration déléguée pour permettre aux utilisateurs ne disposant pas de privilèges appropriés d'effectuer des tâches d'administration ZFS.

Présentation de l'administration déléguée de ZFS

Cette fonction vous permet de distribuer des droits précis à des utilisateurs ou des groupes spécifiques, voire à tous les utilisateurs. Deux types de droits délégués sont pris en charge :

L'administration déléguée de ZFS offre des fonctions similaires au modèle de sécurité RBAC. Cette fonctionnalité offre les avantages suivants pour la gestion des pools de stockage et systèmes de fichiers ZFS :

Considérez l'utilisation de l'administration déléguée pour la répartition des tâches ZFS. Pour plus d'informations sur l'utilisation de RBAC pour gérer les tâches d'administration générales de Solaris, reportez-vous à Partie III, Roles, Rights Profiles, and Privileges du System Administration Guide: Security Services (en anglais).

Désactivation des droits délégués de ZFS

La propriété delegation du pool permet de contrôler les fonctions d'administration déléguées. Par exemple :


# zpool get delegation users
NAME  PROPERTY    VALUE       SOURCE
users  delegation  on          default
# zpool set delegation=off users
# zpool get delegation users
NAME  PROPERTY    VALUE       SOURCE
users  delegation  off         local

Par défaut, la propriété delegation est activée.

Délégation de droits ZFS

Vous pouvez utiliser la commande zfs allow pour accorder des droits applicables aux jeux de données ZFS aux utilisateurs non root, de la manière suivante :

Le tableau suivant décrit les opérations pouvant être déléguées et tout droit dépendant devant réaliser ces opérations déléguées.

Droit (sous-commande) 

Description 

Dépendances 

allow

Capacité à accorder des droits qui vous ont été octroyés à un autre utilisateur. 

Doit également disposer du droit à autoriser. 

Clone

Capacité à cloner tout instantané du jeu de données.  

Doit également disposer de la capacité create et de la capacité mount dans le système de fichiers d'origine.

create

Capacité à créer des jeux de données descendants. 

Doit également disposer de la capacité mount.

destroy

Capacité à détruire un jeu de données. 

Doit également disposer de la capacité mount.

monter

Capacité à monter et démonter un jeu de données, et à créer et détruire les liens vers des périphériques de volume. 

 

promote

Capacité à promouvoir le clonage d'un jeu de données. 

Doit également disposer de la capacité mount et de la capacité promote dans le système de fichiers d'origine.

receive

Capacité à créer des systèmes de fichiers descendant à l'aide de la commande zfs receive.

Doit également disposer de la capacité mount et de la capacité create.

rename

Capacité à renommer un jeu de données. 

Doit également disposer de la capacité create et de la capacité mount dans le nouveau parent.

rollback

Capacité à restaurer un instantané. 

 

send

Capacité à envoyer un flux d'instantané. 

 

share

Capacité à partager et annuler le partage d'un·jeu de données. 

 

Instantané

Capacité à prendre un instantané de·jeu de données. 

 

Vous pouvez déléguer l'ensemble d'autorisations suivant mais l'autorisation peut être limitée à l'accès, la lecture et la modification :

Vous pouvez en outre déléguer les propriétés ZFS suivantes à des utilisateurs non root :

Certaines de ces propriétés ne peuvent être définies qu'à la création d'un jeu de données. Pour une description de ces propriétés, reportez-vous à la section Présentation des propriétés ZFS.

Délégation des autorisations ZFS (zfs allow)

La syntaxe de zfs allow est la suivante :


zfs allow -[ldugecs] everyone|user|group[,...] perm|@setname,...] filesystem| volume

La syntaxe de zfs allow suivante (en gras) identifie les utilisateurs auxquels les droits sont délégués :


zfs allow [-uge]|user|group|everyone [,...] filesystem | volume

Vous pouvez spécifier plusieurs entrées sous forme de liste séparée par des virgules. Si aucune option -uge n'est spécifiée, l'argument est interprété en premier comme le mot-clé everyone, puis comme un nom d'utilisateur et enfin, comme un nom de groupe. Pour spécifier un utilisateur ou un groupe nommé "everyone", utilisez l'option -u ou l'option -g. Pour spécifier un groupe portant le même nom qu'un utilisateur, utilisez l'option -g. L'option -c accorde des droits create-time.

La syntaxe de zfs allow suivante (en gras) identifie la méthode de spécification des droits et jeux de droits :


zfs allow [-s] ... perm|@setname [,...] filesystem | volume

Vous pouvez spécifier plusieurs droits sous forme de liste séparée par des virgules. Les noms de droits sont identiques aux sous-commandes et propriétés ZFS. Pour plus d'informations, reportez-vous à la section précédente.

Les droits peuvent être regroupés en jeux de droits et sont identifiés par l'option -s. Les jeux de droits peuvent être utilisés par d'autres commandes zfs allow pour le système de fichiers spécifié et ses descendants. Les jeux de droits sont évalués dynamiquement et de ce fait, toute modification apportée à un jeu est immédiatement mise à jour. Les jeux de droits doivent se conformer aux mêmes conventions d'attribution de noms que les systèmes de fichiers ZFS, à ceci près que leurs noms doivent commencer par le caractère arobase (@) et ne pas dépasser 64 caractères.

La syntaxe de zfs allow suivante (en gras) identifie la méthode de délégation des droits :


zfs allow [-ld] ... ... filesystem | volume

L'option -l indique que le droit est accordé au jeu de données spécifié mais pas à ses descendants, à moins de spécifier également l'option -d. L'option -d indique que le droit est accordé pour les jeux de données descendants mais pas pour l'actuel jeu de données, à moins de spécifier également l'option -l. Si aucun des droits -ld n'est spécifié, les droits sont accordés au système de fichiers ou au volume, ainsi qu'à leurs descendants.

Suppression des droits délégués de ZFS (zfs unallow)

Vous pouvez supprimer des droits précédemment accordés, à l'aide de la commande zfs unallow.

Supposons par exemple que vous déléguiez les droits create, destroy, mount et snapshot de la manière suivante :


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

Pour supprimer ces autorisations, vous devez utiliser une syntaxe du type suivant :


# zfs unallow cindys tank/cindys
# zfs allow tank/cindys

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