Guide d'administration Oracle Solaris ZFS

Nouveau modèle ACL Solaris

Les versions précédentes du système d'exploitation Solaris assuraient la prise en charge d'une implémentation ACL reposant principalement sur la spécification d'ACL POSIX-draft. Les ACL basées sur POSIX-draft sont utilisées pour protéger les fichiers UFS et sont traduites par les versions de NFS antérieures à NFSv4.

Grâce à l'introduction de NFSv4, un nouveau modèle d'ACL assure entièrement la prise en charge de l'interopérabilité qu'offre NFSv4 entre les clients UNIX et non UNIX. La nouvelle implémentation d'ACL, telle que définie dans les spécifications NFSv4, fournit des sémantiques bien plus riches, basées sur des ACL NT.

Les principales différences du nouveau modèle ACL sont les suivantes :

Les deux modèles d'ACL assurent un contrôle d'accès bien plus fin, et disponible avec les droits de fichier standard. De façon similaire aux listes de contrôle d'accès POSIX-draft, les nouvelles ACL se composent de plusieurs ACE (Access Control Entry, entrées de contrôle d'accès).

Les ACL POSIX-draft utilisent une seule entrée pour définir les permissions autorisées et celles qui ne le sont pas. Le nouveau modèle d'ACL dispose de deux types d'ACE qui affectent la vérification d'accès : ALLOW et DENY. Par conséquent, il est impossible de déduire de toute entrée de contrôle d'accès (ACE, Access Control Entry) définissant un groupe de droits si les droits qui n'ont pas été définis dans cette ACE sont ou non autorisés.

La conversion entre les ACL NFSv4 et les ACL POSIX-draft s'effectue comme suit :

Pour obtenir des informations sur les autres limitations des ACL et des produits de sauvegarde, reportez-vous à la section Enregistrement de données ZFS à l'aide d'autres produits de sauvegarde.

Descriptions de syntaxe pour la configuration des ACL

Les deux formats de base des ACL sont les suivants :

Syntax for Setting Trivial ACLs

Une ACL constitue un élément trivial : elle représente uniquement les entrées UNIX owner/group/other standard.

chmod [options] A[index]{+|=}owner@ |group@ |everyone@: droits d'accès/...[:indicateurs d'héritage]: deny | allow fichier

chmod [options] A-owner@, group@, everyone@:droits d'accès /...[:indicateurs d'héritage]:deny | allow fichier ...

chmod [options] A[index]- fichier

Syntaxe pour la configuration d'ACL non triviales

chmod [options] A[index]{+|=}user|group:name:droits d'accès /...[:indicateurs d'héritage]:deny | allow fichier

chmod [options] A-user|group:name:droits d'accès /...[:indicateurs d'héritage]:deny | allow fichier ...

chmod [options] A[index]- fichier

owner@, group@, everyone@

Identifie le type d'entrée d'ACL pour la syntaxe d'ACL triviale. Pour obtenir une description des types d'entrée d'ACL, reportez-vous au Tableau 8–1.

user ou group:ACL-entry-ID=username or groupname

Identifie le type d'entrée d'ACL pour la syntaxe d'ACL explicite. Les types d'entrées d'ACL user et group doivent également contenir les éléments suivants : ACL-entry-ID, username ou groupname. Pour obtenir une description des types d'entrée d'ACL, reportez-vous au Tableau 8–1.

droits-accès/.../

Identifie les droits d'accès accordés ou refusés. Pour obtenir une description des privilèges d'accès d'ACL, reportez-vous au Tableau 8–2.

indicateurs-héritage

Identifie une liste optionnelle d'indicateurs d'héritage d'ACL. Pour une description des indicateurs d'héritage d'ACL, reportez-vous au Tableau 8–3.

deny | allow

Détermine si les droits d'accès sont accordés ou refusés.

Dans l'exemple suivant, la valeur de l'ID d'entrée d'ACL n'est pas pertinente :


group@:write_data/append_data/execute:deny

L'exemple suivant inclut un ID d'entrée d'ACL car un utilisateur spécifique (type d'entrée d'ACL) est inclus dans la liste.


0:user:gozer:list_directory/read_data/execute:allow

Lorsqu'une entrée d'ACL s'affiche, elle est similaire à celle-ci :


2:group@:write_data/append_data/execute:deny

Dans l'exemple suivant, la valeur 2, à savoir la désignation de la propriété ID d'index, permet d'identifier l'entrée ACL dans la plus grande ACL qui peut présenter plusieurs entrées pour le propriétaire, des UID spécifiques, des groupes et pour tous. Vous pouvez spécifier l'ID d'index avec la commande chmod pour identifier la partie de l'ACL que vous souhaitez modifier. Par exemple, vous pouvez identifier l'ID de l'index 3 A3 en utilisant une syntaxe de commande chmod semblable à la syntaxe suivante :


chmod A3=user:venkman:read_acl:allow filename

Les types d'entrées d'ACL (qui sont les représentations d'ACL du propriétaire, du groupe et autres) sont décrits dans le tableau suivant.

Tableau 8–1 Types d'entrées d'ACL

Type d'entrée d'ACL 

Description 

owner@

Spécifie l'accès accordé au propriétaire de l'objet. 

group@

Spécifie l'accès accordé au groupe propriétaire de l'objet. 

everyone@

Spécifie l'accès accordé à tout utilisateur ou groupe ne correspondant à aucune autre entrée d'ACL. 

user

Avec un nom d'utilisateur, spécifie l'accès accordé à un utilisateur supplémentaire de l'objet. Cette entrée doit comprendre l'ID d'entrée ACL contenant un nom d'utilisateur ou un ID d'utilisateur. Le type d'entrée d'ACL est incorrect si la valeur n'est ni un UID numérique, ni un nom d'utilisateur.

group

Avec un nom de groupe, spécifie l'accès accordé à un utilisateur supplémentaire de l'objet. Cette entrée doit comprendre l'ID d'entrée ACL contenant un nom de groupe ou un ID de groupe. Le type d'entrée d'ACL est incorrect si la valeur n'est ni un GID numérique, ni un nom de groupe.

Les privilèges d'accès sont décrits dans le tableau suivant.

Tableau 8–2 Privilèges d'accès d'ACL

Privilège d'accès 

Privilège d'accès compact 

Description 

add_file

w

Droit d'ajouter un fichier à un répertoire. 

add_subdirectory

p

Dans un répertoire, droit de créer un sous-répertoire. 

append_data

p

Marque de réservation. Non implémentée actuellement. 

delete

d

Droit de supprimer un fichier. 

delete_child

D

Droit de supprimer un fichier ou un répertoire au sein d'un répertoire. 

execute

x

Droit d'exécuter un fichier ou d'effectuer une recherche dans le contenu d'un répertoire. 

list_directory

r

Droit de dresser la liste du contenu d'un répertoire. 

read_acl

c

Droit de lire l'ACL (ls).

read_attributes

a

Droit de lire les attributs de base (non ACL) d'un fichier. Considérez les attributs de base comme les attributs de niveau stat. L'autorisation de ce bit de masque d'accès signifie que l'entité peut exécuter ls(1) et stat(2).

read_data

r

Droit de lire les informations d'un fichier. 

read_xattr

R

Droit de lire les attributs d'un fichier ou d'effectuer une recherche dans le répertoire d'attributs étendus d'un fichier. 

synchronize

s

Marque de réservation. Non implémentée actuellement. 

write_xattr

W

Droit de créer des attributs étendus ou d'écrire dans le répertoire d'attributs étendus. 

L'attribution de ce droit à un utilisateur signifie que ce dernier peut créer un répertoire d'attributs étendus pour un fichier. Les droits du fichier d'attributs contrôlent l'accès de l'utilisateur à l'attribut. 

write_data

w

Droit de modifier ou de remplacer le contenu d'un fichier. 

write_attributes

A

Droit de remplacer les horodatages associés à fichier ou un répertoire par une valeur arbitraire. 

write_acl

C

Droit d'écriture sur l'ACL ou de modification de celle-ci à l'aide de la commande chmod.

write_owner

o

Droit de modifier le propriétaire ou le groupe d'un fichier. Ou capacité d'exécuter les commandes chown ou chgrp sur le fichier.

Droit de devenir propriétaire d'un fichier ou droit de définir la propriété de groupe du fichier sur un groupe dont fait partie l'utilisateur. Le privilège PRIV_FILE_CHOWN est requis pour définir la propriété de fichier ou de groupe sur un groupe ou un utilisateur arbitraire.

Héritage d'ACL

L'héritage d'ACL a pour finalité de permettre à un fichier ou répertoire d'hériter des ACL qui lui sont destinées, tout en tenant compte des droits existants du répertoire parent.

Par défaut, les ACL ne sont pas propagées. Si vous définissez une ACL non triviale sur un répertoire, les répertoires enfant n'en héritent pas. Vous devez spécifier l'héritage d'une ACL dans un fichier ou un répertoire.

Les indicateurs d'héritage facultatifs sont décrits dans le tableau suivant.

Tableau 8–3 Indicateurs d'héritage d'ACL

Indicateur d'héritage 

Indicateur d'héritage compact 

Description 

file_inherit

f

Hérite de l'ACL à partir du répertoire parent mais s'applique uniquement aux fichiers du répertoire. 

dir_inherit

d

Hérite de l'ACL à partir du répertoire parent mais s'applique uniquement au sous-répertoires du répertoire. 

inherit_only

i

Hérite de l'ACL à partir du répertoire parent mais ne s'applique qu'aux fichiers et sous-répertoires récemment créés, pas au répertoire lui-même. Cet indicateur requiert les indicateurs file_inherit et/ou dir_inherit afin de spécifier ce qui doit être hérité.

no_propagate

n

N'hérite que de l'ACL provenant du répertoire parent vers le contenu de premier niveau du répertoire, et non les contenus de second niveau et suivants. Cet indicateur requiert les indicateurs file_inherit et/ou dir_inherit afin de spécifier ce qui doit être hérité.

-

SO 

Aucun droit n'est accordé. 

De plus, vous pouvez configurer un héritage d'ACL par défaut plus ou moins strict sur le système de fichiers à l'aide de la propriété de système de fichiers aclinherit. Pour de plus amples informations, consultez la section suivante.

Propriétés ACL

Un système de fichiers ZFS contient deux propriétés en rapport avec les ACL.