# acl
Listes de contrôle d'accès
Tout objet peut être considéré comme étant associé avec une ACL qui
gouverne l'accès discrétionnaire de cet objet. Cette ACL est référée à
une ACL d'accès. En plus, un répertoire peut avoir une ACL associée qui
gouverne l'ACL initial pour les objets créés dans ce répertoire. Cette
ACL est référé à l'ACL par défaut.
Une ACL consiste d'un jeu d'entrées d'ACL. Une entrée ACL spécifie
les permissions d'accès sur l'objet associé pour un utilisateur ou
groupe individuel comme une combinaison de permissions de lecture,
écriture et de recherche/exécution.
Une entrée d'ACL contient un type de tag d'entrée, une qualifiant de
tag d'entrée, et un jeu de permissions. On utilise le terme qualifier
pour dénoter le qualifieur de tag d'entrée d'une entrée d'ACL.
Le qualifieur dénote l'identifiant d'un utilisateur ou un groupe,
pour les entrées avec les types de tag d'ACL\_USER ou ACL\_GROUP,
respectivement. Les entrées avec des types de tag autre que ACL\_USER ou
ACL\_GROUP n'ont pas de qualifieur définis.
Les types de tag d'entrée suivant sont définis
**ACL\_USER\_OBJ** dénote les droits d'accès pour le propriétaire du
fichier
**ACL\_USER** dénote les droits d'accès pour les utilisateurs identifiés
par le qualifieur de l'entrée
**ACL\_GROUP\_OBJ** dénote les droits d'accès pour le groupe du
fichier
**ACL\_GROUP** dénote les droits d'accès pour les groupes identifiés par
le qualifieur de l'entrée
**ACL\_MASK** dénote les droits d'accès maximum qui peuvent être donnés
par les entrées de type ACL\_USER, ACL\_GROUP\_OBJ ou ACL\_GROUP.
**ACL\_OTHER** dénote les droits d'accès pour les processus qui ne
matchent aucune autre entrée dans l'acl.
Quand un accès est vérifié, les entrées ACL\_USER\_OBJ et ACL\_USER
sont testés avec le user ID effectif. L'ID de groupe effectif, et les
IDs de groupe supplémentaire sont testé avec les entrées ACL\_GROUP\_OBJ
et ACL\_GROUP.
Une ACL valide contient exactement une entrée avec chaque types de
tag ACL\_USER\_OBJ, ACL\_GROUP\_OBJ, et ACL\_OTHER. Les entrées avec les
types de tag ACL\_USER et ACL\_GROUP peuvent apparaître 0 ou plusieurs
fois dans une ACL. Dans une ACL qui contient des entrée de type de tag
ACL\_USER ou ACL\_GROUP doivent contenir exactement une entrée de type
de tag ACL\_MASK. Si une ACL ne contient pas d'entrées de type de tag
ACL\_USER ou ACL\_GROUP, l'entrée ACL\_MASK est optionnel.
Tous les qualifier d'UID doivent être unique dans les entrées du type
de tag ACL\_USER, et tous les GID doivent être unique dans les entrée de
type de tag ACL\_GROUP.
La fonction acl\_get\_file() retourne une ACL avec 0 entrées d'ACL
comme ACL par défaut d'un répertoire, si le répertoire n'est pas associé
avec une ACL par défaut. La fonction acl\_set\_file() accepte également
une ACL avec 0 entrées d'ACL comme ACL par défaut pour les répertoires,
dénotant que le répertoire ne devrait pas être associé avec une ACL par
défaut. C'est équivalement à utiliser la fonction
acl\_delete\_def\_file().
\[SECTION\] name="Correspondance entre les entrées d'ACL et les bits
de permission de fichier" table="paragraphes" imbrication="0"
Il y a une correspondance entre les permissions du propriétaire du
fichier, groupe, et autres et les entrées d'ACL: les permissions du
propriétaire correspondent aux permissions de l'entrée ACL\_USER\_OBJ.
Si l'ACL a une entrée ACL\_MASK, les permissions du groupe correspondent
aux permission de l'entrée ACL\_MASK. Sinon, si l'ACL n'a pas d'entrée
ACL\_MASK, les permissions du groupe correspondent aux permissions de
l'entrée ACL\_GROUP\_OBJ. Les permissions des autres correspondent aux
permission de l'entrée ACL\_OTHER\_OBJ.
Les permissions du propriétaire, du groupe, et des autres match
toujours les permissions de l'entrée d'ACL correspondante. Les
modification des bits de permission de fichier résultent en la
modification des entrées d'ACL correspondantes, et les modification des
entrées d'ACL résultent en la modification des bits de permission de
fichier.
## Création d'objet et ACL par défaut
L'ACL d'accès à un objet fichier est initialisé quand l'objet est
créé avec une des fonctions creat(), mkdir(), mknod(), mkfifo() ou
open(). Si une ACL par défaut est associée avec un répertoire, le
paramètre mode des fonctions créant les objets fichier et l'ACL par
défaut du répertoire sont utilisés pour déterminer l'ACL du nouvel
objet:
**1.** Le nouvel objet hérite de l'ACL par défaut du répertoire
correspondant comme son ACL d'accès
**2.** Les entrées d'ACL correspondant aux bits de permission de fichier
sont modifiés pour qu'elles ne contiennent pas de permission qui ne sont
pas contenus dans les permissions spécifiées par le paramètre mode.
Si aucune ACL par défaut n'est associé avec un répertoire, le
paramètre mode sont utilisés pour déterminer l'ACL du nouvel objet:
**1.** Le nouvel objet se voit assigner une ACL d'accès contenant des
entrées de type de tag ACL\_USER\_OBJ, ACL\_GROUP\_OBJ, et ACL\_OTHER.
Les permission de ces entrées sont définie aux permissions spécifiées
par le masque de création de fichier.
**2.** Les entrées d'ACL d'accès correspondant au bits de permission de
fichier sont modifié pour qu'ils ne contiennent pas de permission qui ne
soient pas contenus dans les permissions spécifiées par le paramètre
mode.
## Algorithme de vérification d'accès
Un processus peut demander un accès en lecture, écriture ou
exécution/recherche sur un objet fichier protégé par une ACL.
L'algorithme de vérification d'accès détermine si l'accès à l'objet est
autorisé.
**1.** Si le User ID effectif du processus correspond au User ID du
propriétaire du fichier, alors
**-** Si l'entrée ACL\_USER\_OBJ contient les permissions
demandées, l'accès est donné,
**-** Sinon l'accès est refusé
**2.** Sinon si le User ID effectif du processus correspond au qualifier
d'une entrée de type ACL\_USER, alors
**-** Si l'entrée ACL\_USER correspondant et l'entrée ACL\_MASK
contiennent les permissions requises, l'accès est donné
**-** Sinon l'accès est refusé
**3.** Sinon si le GID effectif d'un ID de groupe supplémentaire du
processus correspond au groupe du fichier ou le qualifier d'une entrée
du type ACL\_GROUP, alord
**-** Si l'ACL contient une entrée ACL\_MASK, alors
**.** Si l'entrée ACL\_MASK et une des entrées
ACL\_GROUP\_OBJ ou ACL\_GROUP correspondant contient les permissions
requises, l'accès est donné
**.** Sinon l'accès est refusé
**-** Sinon (noter qu'il ne peut pas y avoir d'entrée ACL\_GROUP
sans entrée ACL\_MASK)
**.** Si l'entrée ACL\_GROUP\_OBJ contient les
permissions requises, l'accès est donné,
**.** Sinon l'accès est refusé
**4.** Sinon si l'entrée ACL\_OTHER contient les permissions requises,
l'accès est donné
**5.** Sinon l'accès est refusé.
## Forme de texte d'ACL
Une forme de texte long et cours pour représenter les ACL sont
définis. Dans les 2 formes, les entrées d'ACL sont représenté en 3
champs séparés: le type de tag de l'entrée de l'ACL, le qualifier de
l'entrée de l'ACL, et les permissions d'accès discrétionnaires. Le
premier champ contient un des mots clé de type de tag suivant:
**user** Une entrée ACL user spécifie que l'accès est donné soit au
propriétaire du fichier (type de tag d'entrée ACL\_USER\_OBJ) ou un
utilisateur spécifique (type de tag d'entrée ACL\_USER).
**group** Une entrée ACL group spécifie que l'accès est donné soit au
groupe du fichier (type de tag d'entrée ACL\_GROUP\_OBJ), ou un groupe
spécifique (type de tag d'entrée ACL\_GROUP).
**mask** Une entrée ACL mask spécifie l'accès maximum qui peut être
donné à toute entrée d'ACL excepté l'entrée utilisateur pour le
propriétaire du fichier et l'entrée other (type de tag d'entrée
ACL\_MASK).
**other** Une entrée ACL other spécifie l'accès donné à tout processus
qui ne correspond à aucune entrée d'ACL user et group (type de tag
d'entrée ACL\_OTHER).
Le second champ contient l'identifiant d'utilisateur ou de groupe
associé avec l'entrée d'ACL pour les entrées de type de tag ACL\_USER ou
ACL\_GROUP, et est vide pour toutes les autres entrées. Un identifiant
d'utilisateur peut être un nom d'utilisateur ou un UID. Un identifiant
de groupe peut être un nom de groupe ou un ID.
Le troisième champ contient les permissions d'accès discrétionnaires.
Les permission de lire, écrire, et recherche/exécution sont représentés
par les caractères r,w et y, respectivement. Chacun de ces caractères
est remplacé par le caractère '-' pour indiquer qu'une permission est
absente. En convertissant de la forme texte en représentation interne,
les permissions absente n'ont pas besoin d'être spécifiés.
Les espaces blanc sont autorisé au début et à la fin de chaque entrée
d'ACL, et immédiatement avant et après un séparateur de champ.
## Forme de texte long
La forme de texte long contient une entrée d'ACL par ligne. En plus,
un '\#' peut commencer un commentaire qui s'étend jusqu'à la fin de la
ligne. Si une entrée d'ACL ACL\_USER, ACL\_GROUP\_OBJ ou ACL\_GROUP
contient des permissions qui ne sont pas contenus dans ACL\_MASK,
l'entrée est suivie par un '\#', la chaîne 'effective', et les
permissions d'accès effectif définis par cette
entrée.
Exemple:
user::rw-
user:lisa:rw- \#effective:r--
group::r--
group:toolies:rw- \#effective:r--
mask::r--
other::r--
## Forme de texte court
La forme de texte court est une séquence d'entrées d'ACL séparés par
des virgules, et est utilisant comme entrée. Les commantaires ne sont
pas supportés. Les mots clé de type de tag d'entrée peuvent apparaître
soit sous le forme complète, soit sous forme d'une seule lettre. Les
abréviations sont pour user (u), group (g), mask (m) et other (o). Les
permission peuvent contenir au moins un caractère de chaque dans
n'importe quel
ordre.
Exemple:
u::rw-,u:lisa:rw-,g::r--,g:toolies:rw-,m::r--,o::r--
g:toolies:rw,u:lisa:rw,u::wr,g::r,o::r,m::r
Dans les systèmes qui supportent les ACL, les utilitaires de fichier
ls, cp et mv changent leur comportement de la manière suivante:
**-** Pour les fichier qui ont une ACL par défaut ou une ACL d'accès qui
contient plus que les 3 entrées requise, ls -l affiche un signe + après
la chaîne de permissions.
**-** Si le flag -p est spécifié, l'utilisataire cp préserve également
les ACL. Si ce n'est pas possible, une alerte est produite.
**-** mv préserve toujours les ACL. Si ce n'est pas possible, une alerte
est produite.