Tableau 35.1, « Types d'éléments d'ACL » résume les six types possibles d'éléments d'ACL, dont chacun définit des droits d'accès pour un utilisateur ou un groupe d'utilisateurs. L'élément owner (propriétaire)définit les droits d'accès de l'utilisateur propriétaire du fichier ou du répertoire. L'élément owning group (groupe propriétaire) définit les droits d'accès du groupe propriétaire du fichier. Le super-utilisateur peut changer le propriétaire ou le groupe propriétaire avec chown ou chgrp, auquel cas les éléments propriétaire et groupe propriétaire font référence au nouveau propriétaire et groupe propriétaire. Chaque élément named user (utilisateur nommé) définit les droits d'accès de l'utilisateur spécifié dans le champ qualificateur de l'élément, qui se trouve dans le champ du milieu sous la forme du texte présenté dans Tableau 35.1, « Types d'éléments d'ACL ». Chaque élément named group définit les droits d'accès du groupe spécifié dans le champ qualificateur de l'élément. Seuls les éléments utilisateur nommé et groupe nommé ont un champ qualificateur qui n'est pas vide. L'élément other (autre) définit les droits d'accès de tous les utilisateurs.
L'élément mask limite en outre les droits d'accès accordés par les éléments named user, named group et owning group en définissant lesquels parmi les droits d'accès dans ces éléments sont effectifs et lesquels sont masqués. Si des droits existent dans un des éléments mentionnés ainsi que dans le masque, ils sont effectifs. Les droits contenus uniquement dans le masque ou uniquement dans l'élément lui-même ne sont pas effectifs—cela signifie que les droits d'accès ne sont pas accordés. Tous les droits définis dans les éléments owner et owning group sont toujours effectifs. L'exemple de Tableau 35.2, « Masquage de droits d'accès » montre ce mécanisme.
Il y a deux classes de base d'ACL : une ACL minimale ne contient que les éléments concernant les types owner, owning group et other, ce qui correspond aux bits conventionnels de droits d'accès pour les fichiers et les répertoires. Une ACL étendue va au delà de ce principe. Elle doit contenir un élément mask et peut inclure plusieurs éléments des types named user et named group.
Tableau 35.1. Types d'éléments d'ACL
|
Type |
Forme du texte |
|---|---|
|
owner |
|
|
named user |
|
|
owning group |
|
|
named group |
|
|
mask |
|
|
other |
|
Tableau 35.2. Masquage de droits d'accès
|
Type d'élément |
Forme du texte |
Droits d'accès |
|---|---|---|
|
named user |
|
|
|
mask |
|
|
|
Droits d'accès effectifs : |
|
Figure 35.1, « ACL minimale : éléments d'ACL comparés aux bits de droits d'accès » et la figure Figure 35.2, « ACL étendue : éléments d'ACL comparés aux bits de droits d'accès » illustrent les deux cas d'une ACL minimale et
d'une ACL étendue. Les figures sont structurées en trois blocs—le
bloc de gauche présente les spécifications de type des éléments d'ACL,
celui du milieu un exemple d'ACL et celui de droite les bits de droits
d'accès respectifs conformément au principe conventionnel de droits
d'accès, par exemple, comme ls -l le montre
également. Dans les deux cas, les droits d'accès owner
class sont mis en correspondance avec l'élément d'ACL
owner. Les droits d'accès other
class sont mis en correspondance avec l'élément d'ACL
respectif. Cependant, la mise en correspondance des droits d'accès
group class est différent dans les deux cas.
Dans le cas d'une ACL minimale — sans élément mask — les droits d'accès group class sont mis en correspondance avec l'élément d'ACL owning group. Ce comportement est illustré dans Figure 35.1, « ACL minimale : éléments d'ACL comparés aux bits de droits d'accès ». Dans le cas d'une ACL étendue — avec mask — les droits d'accès group class sont mis en correspondance avec l'élément mask. Ce comportement est illustré dans Figure 35.2, « ACL étendue : éléments d'ACL comparés aux bits de droits d'accès ».
Cette approche de mise en correspondance assure une interaction harmonieuse des applications, qu'elles disposent ou non de la prise en charge des ACL. Les droits d'accès qui ont été affectés au moyen des bits de droits d'accès représentent la limite supérieure pour tous les autres « réglages fins » effectués avec une ACL. Les changements apportés aux bits de droits d'accès sont reflétés par l'ACL et vice versa.
La gestion des ACL d'accès est expliquée dans l'exemple suivant :
Avant de créer le répertoire, utilisez la commande
umask pour définir quels droits d'accès doivent être
masqués chaque fois qu'un objet fichier est créé. La commande
umask 027 règle les droits par défaut
en donnant au propriétaire l'étendue complète des droits d'accès
(0), en refusant au l'accès en écriture
(2) et en ne donnant aucun droit du tout aux autres
utilisateurs (7). La commande umask
masque véritablement les bits de droits d'accès correspondants ou les
désactive. Pour plus de détails, consultez la page de manuel correspondante
(man umask).
mkdir monrep devrait créer le répertoire
monrep avec les droits d'accès par défaut, comme
défini par umask. Faites appel à ls -dl
monrep pour vérifier si tous les droits ont été
affectés correctement. La sortie de cet exemple est :
drwxr-x--- ... tux projet3 ... monrep
Avec getfacl monrep, vérifiez
l'état initial de l'ACL. Celle-ci donne des informations comme :
# file: monrep
# owner: tux
# group: projet3
user::rwx
group::r-x
other::---
La sortie de getfacl reflète précisément la mise en correspondance de bits de droits d'accès avec des éléments d'ACL, comme décrit dans Section 35.3.1, « Éléments d'ACL et bits de droits d'accès du mode fichier ». Les trois premières lignes de la sortie affichent le nom, le propriétaire et le groupe propriétaire du répertoire. Les trois lignes suivantes contiennent les trois éléments d'ACL owner, owning group et other. En fait, dans le cas de cette ACL minimale, la commande getfacl ne produit aucune information que vous n'auriez pu obtenir avec ls.
Modifiez l'ACL pour affecter des droits d'accès en lecture,
écriture et exécution à un utilisateur supplémentaire
geeko et à un groupe supplémentaire
mascottes avec :
setfacl -m user:geeko:rwx,group:mascottes:rwx monrep
L'option -m invite setfacl à
modifier l'ACL existante. L'argument suivant indique les éléments d'ACL à
modifier (les entrées multiples sont séparées par des virgules). La partie
finale spécifie le nom du répertoire auquel ces modifications devront
s'appliquer. Utilisez la commande getfacl pour jeter un
coup d'œil à l'ACL obtenue.
# file: monrep # owner: tux # group: projet3 user::rwx user:geeko:rwx group::r-x group:mascottes:rwx mask::rwx other::---
En plus des éléments initiés pour l'utilisateur
geeko et le groupe mascottes, un
élément mask a été généré. Cet élément
mask est défini automatiquement, de sorte que tous les
droits d'accès sont effectifs. setfacl adapte
automatiquement les éléments mask existants aux
réglages modifiés, à moins que vous ne désactiviez cette fonctionnalité
avec -n. mask définit les droits
d'accès effectifs maximaux pour tous les éléments dans le group
class. Ceci inclut named user,
named group et owning group. Les
bits de droit d'accès de group class affichés par
ls -dl monrep correspondent à présent à
l'élément mask.
drwxrwx---+ ... tux projet3 ... monrep
La première colonne de la sortie contient maintenant un
+ additionnel pour indiquer qu'il y a une ACL
étendue pour cet élément.
Selon la sortie de la commande ls, les droits
d'accès pour l'élément mask comprennent aussi un accès
en écriture. Traditionnellement, de tels bits de droits d'accès
signifieraient que le owning group (ici
projet3) a aussi un accès en écriture dans le répertoire
monrep. Cependant, les droits d'accès effectivement
effectifs pour le owning group correspondent à la
partie se chevauchant des droits d'accès définis pour le owning
group et le mask—qui est
r-x dans notre exemple (voir Tableau 35.2, « Masquage de droits d'accès »). Dans la mesure où les droits d'accès effectifs du
owning group de cet exemple sont concernés, rien n'a
changé, même après l'ajout des éléments d'ACL.
Modifiez l'élément mask avec
setfacl ou chmod. Par exemple, faites
appel à chmod g-w monrep. ls
-dl monrep affiche alors :
drwxr-x---+ ... tux projet3 ... monrep
getfacl monrep fournit la
sortie suivante :
# file: monrep # owner: tux # group: projet3 user::rwx user:geeko:rwx # effective: r-x group::r-x group:mascottes:rwx # effective: r-x mask::r-x other::---
Après avoir exécuté la commande chmod pour
supprimer le droit d'accès en écriture des bits du group
class, la sortie de la commande ls est
suffisante pour voir que les bits mask doivent avoir
changé en conséquence : le droit d'accès en écriture est à nouveau
limité au propriétaire de monrep. La sortie de la
commande getfacl le confirme. Cette sortie comporte un
commentaire pour tous ces éléments dans lesquels les bits de droits d'accès
effectifs ne correspondent pas aux droits d'origine, parce qu'ils ont été
filtrés en fonction de l'élément mask. Les droits
d'accès d'origine peuvent être restaurés à tout moment avec chmod
g+w monrep.
Les répertoires peuvent avoir une ACL par défaut, ce qui est un type spécial d'ACL définissant les droits d'accès dont les objets présents dans le répertoire héritent quand ils sont créés. Une ACL par défaut affecte à la fois les sous-répertoires et les fichiers.
Les droits d'accès dans une ACL par défaut se transmettent différemment aux fichiers et aux sous-répertoires :
Un sous-répertoire hérite de l'ACL par défaut du répertoire parent aussi bien au titre de son ACL par défaut que de son ACL d'accès.
Un fichier hérite de l'ACL par défaut au titre de son ACL d'accès.
Tous les appels système qui créent des objets système de fichiers
utilisent un paramètre mode qui définit les droits
d'accès pour l'objet système de fichiers nouvellement créé. Si le
répertoire parent n'a pas d'ACL par défaut; les bits de droits d'accès,
comme définis par le umask, sont soustraits des droits
d'accès tels qu'ils sont passés par le paramètre mode,
le résultat étant affecté au nouvel objet. Si une ACL par défaut existe
pour le répertoire parent, les bits de droits d'accès affectés au nouvel
objet correspondent à la partie se chevauchent des droits d'accès du
paramètre mode et ceux qui sont définis dans l'ACL par
défaut. L'umask est négligé dans ce cas.
Les trois exemples suivants montrent les principales opérations sur les répertoires et les ACL par défaut :
Ajoutez une ACL par défaut au répertoire existant
monrep avec :
setfacl -d -m group:mascottes:r-x monrep
L'option -d de la commande
setfacl invite setfacl à effectuer
les modifications suivantes (option -m) dans l'ACL par
défaut.
Observez de plus près le résultat de cette commande :
getfacl monrep # file: monrep # owner: tux # group: projet3 user::rwx user:geeko:rwx group::r-x group:mascottes:rwx mask::rwx other::--- default:user::rwx default:group::r-x default:group:mascottes:r-x default:mask::r-x default:other::---
getfacl renvoie à la fois l'ACL d'accès et
l'ACL par défaut. L'ACL par défaut es formée par toutes les lignes qui
commencent par default. Même si vous avez simplement
exécuté la commande setfacl avec un élément pour le
groupe mascottes dans l'ACL par défaut,
setfacl a automatiquement copié tous les autres
éléments provenant de l'ACL d'accès pour créer une ACL par défaut
valide. Les ACL par défaut n'ont pas d'effet immédiat sur les droits
d'accès. Elles entrent en jeu uniquement lors de la création des objets
systèmes de fichiers. Ces nouveaux objets n'héritent de droits d'accès
que de l'ACL par défaut de leur répertoire parent.
Dans l'exemple suivant, utilisez mkdir
pour créer un sous-répertoire dans monrep, qui
hérite de son ACL par défaut.
mkdir monrep/monsousrep getfacl monrep/monsousrep # file: monrep/monsousrep # owner: tux # group: projet3 user::rwx group::r-x group:mascottes:r-x mask::r-x other::--- default:user::rwx default:group::r-x default:group:mascottes:r-x default:mask::r-x default:other::---
Comme attendu, le sous-répertoire nouvellement créé
monsousrep dispose des droits provenant de l'ACL
par défaut du répertoire parent. L'ACL d'accès de
monsousrep est un reflet exact de l'ACL par défaut
de monrep. L'ACL par défaut que ce répertoire
transmet à ses objets subordonnés est également le même.
Utilisez touch pour créer un fichier dans
le répertoire monrep, par exemple, touch
monrep/monfichier. ls -l
monrep/monfichier affiche alors :
-rw-r-----+ ... tux projet3 ... monrep/monfichier
La sortie de getfacl
monrep/monfichier est :
# file: monrep/monfichier # owner: tux # group: projet3 user::rw- group::r-x # effective:r-- group:mascottes:r-x # effective:r-- mask::r-- other::---
La commande touch utilise un
mode ayant la valeur 0666 lorsque
de nouveaux fichiers sont créés, ce qui signifie que les fichiers sont
créés avec des droits d'accès en lecture et en écriture pour toutes les
classes d'utilisateurs, du moins s'il n'existe pas d'autres restrictions
dans umask ou dans l'ACL par défaut (voir Section 35.3.3.1, « Effets d'une ACL par défaut »). Concrètement, cela signifie
que tous les droits d'accès non contenus dans la valeur
mode sont supprimés des éléments d'ACL respectifs.
Bien qu'aucun droit d'accès n'ait été suprimé depuis l'élément d'ACL du
group class, l'élément mask a
été modifié pour masquer les droits d'accès non réglés dans
mode.
Cette approche assure l'interaction harmonieuse des applications, telles que les compilateurs, avec les ACL. Vous pouvez créer des fichiers avec des droits d'accès restreints et les marquer par la suite comme étant exécutables. Le mécanisme mask garantit que les utilisateurs et les groupes corrects peuvent les exécuter comme souhaité.
Un algorithme de contrôle est appliqué avant d'accorder à n'importe quel processus ou application l'accès à un objet système de fichiers protégé par des ACL. À titre de règle de base, les éléments sont examinés dans l'ordre suivant :owner, named user, owning group et named group et other. L'accès est géré en conformité avec l'élément qui convient le mieux au processus. Les droits d'accès ne se cumulent pas.
La situation se complique si un processus appartient à plusieurs groupes et pourrait potentiellement convenir à plusieurs éléments group. Un élément est sélectionné aléatoirement parmi les éléments appropriés avec les droits d'accès requis. Le fait de savoir lequel des éléments déclenche le résultat final « accès accordé »n'a pas d'importance. De même, si aucun des éléments group approprié ne contient les droits d'accès exigés, un élément sélectionné aléatoirement déclenche le résultat final « access denied ».