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.
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 :
Des droits individuels peuvent être explicitement spécifiés, notamment de création (create), de destruction (destroy), de montage (mount), d'instantané (snapshot), etc.
Des groupes de droits appelés jeux de droits peuvent être définis. Tout utilisateur d'un jeu de droits est automatiquement affecté par les modifications apportées à celui-ci dans le cadre d'une mis à jour. Les jeux de droits commencent par le symbole @ et sont limités à 64 caractères. Les caractères suivant le caractère @ dans le nom de jeu ont les mêmes restrictions que ceux des noms de systèmes de fichiers ZFS standard.
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 :
Les droits sont transférés avec le pool de stockage ZFS lorsque celui-ci est migré.
Offre un héritage dynamique vous permettant de contrôler la propagation des droits dans les systèmes de fichiers.
Peut être configuré de manière à ce que seul le créateur d'un système de fichiers puisse détruire celui-ci.
Les droits peuvent être distribués à des systèmes de fichiers spécifiques. Tout nouveau système de fichiers peut automatiquement récupérer des droits.
Simplifie l'administration de systèmes de fichiers en réseau (NFS, Network File System). Un utilisateur disposant de droits explicites peut par exemple créer un instantané sur un système NFS dans le répertoire .zfs/snapshot approprié.
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).
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.
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 :
Vous pouvez accorder des droits individuels à un utilisateur, à un groupe, voire à tous les utilisateurs.
Vous pouvez accorder des groupes de droits individuels sous forme de jeu de droits à un utilisateur, à un groupe, voire à tous les utilisateurs.
Vous pouvez accorder des droits localement uniquement au jeu de données actuel ou à tous les descendants de celui-ci.
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 :
groupquota
groupused
userprop
userquota
userused
Vous pouvez en outre déléguer les propriétés ZFS suivantes à des utilisateurs non root :
aclinherit
aclmode
atime
canmount
casesensitivity
Somme de contrôle
compression
copies
devices
exec
mountpoint
nbmand
normalization
primarycache
quota
readonly
recordsize
refreservation
reservation
secondarycache
setuid
shareiscsi
sharenfs
sharesmb
snapdir
utf8only
version
volblocksize
volsize
vscan
xattr
zoned
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.
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.
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 |
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 ------------------------------------------------------------- |