- DESCRIPTION
- TYPES D’ACL
- ENTRÉES D’ACL
- ACL VALIDES
- CORRESPONDANCE ENTRE LES ENTRÉES ACL ET LES BITS DE PERMISSION DE FICHIER
- CRÉATION D’OBJET ET ACL PAR DÉFAUT
- ALGORITHME DE VÉRIFICATION D’ACCÈS
- FORMES TEXTUELLES DE L'ACL
- JUSTIFICATION
- MODIFICATIONS DES UTILITAIRES DE FICHIER
- NORMES
- NOTES
- VOIR AUSSI
- AUTEUR
acl — Listes de contrôle d’accès
DESCRIPTION
Cette page de manuel décrit les listes de contrôle d’accès POSIX, qui sont utilisées pour définir des droits d’accès discrétionnaires plus précis pour les fichiers et les répertoires.
TYPES D’ACL
Chaque objet peut être considéré comme ayant une ACL associée qui régit l’accès discrétionnaire à cet objet ; cette ACL est appelée ACL d’accès. De plus, un répertoire peut avoir une ACL associée qui régit l’ACL d’accès initiale pour les objets créés dans ce répertoire ; cette ACL est appelée ACL par défaut.
ENTRÉES D’ACL
Une ACL est constituée d’un ensemble d’entrées d’ACL. Une entrée d’ACL spécifie les autorisations d’accès sur l’objet associé pour un utilisateur individuel ou un groupe d’utilisateurs, en tant que combinaison des autorisations de lecture, d’écriture et d’exécution/recherche.
Une entrée d’ACL contient un type d’entrée, un qualificateur d’entrée facultatif et un ensemble d’autorisations. Nous utilisons le terme qualificateur pour désigner le qualificateur d’entrée d’une entrée d’ACL.
Le qualificateur désigne l’identifiant d’un utilisateur ou d’un groupe, pour les entrées avec les types d’indicateur ACL_USER ou ACL_GROUP, respectivement. Les entrées avec des types d’indicateur autres que ACL_USER ou ACL_GROUP n’ont pas de qualificateurs définis.
Les types d’indicateur d’entrée suivants sont définis :
ACL_USER_OBJ L’entrée ACL_USER_OBJ désigne les droits d’accès pour le propriétaire du fichier.
ACL_USER Les entrées ACL_USER désignent les droits d’accès pour les utilisateurs identifiés par le qualificateur de l’entrée.
ACL_GROUP_OBJ L’entrée ACL_GROUP_OBJ désigne les droits d’accès pour le groupe de fichiers.
ACL_GROUP Les entrées ACL_GROUP désignent les droits d’accès pour les groupes identifiés par le qualificateur de l’entrée.
ACL_MASK L’entrée ACL_MASK désigne les droits d’accès maximum qui peuvent être accordés par les entrées de type ACL_USER, ACL_GROUP_OBJ ou ACL_GROUP.
ACL_OTHER L’entrée ACL_OTHER désigne les droits d’accès pour les processus qui ne correspondent à aucune autre entrée de l’ACL.
Lorsqu’une vérification d’accès est effectuée, les entrées ACL_USER_OBJ et ACL_USER sont testées par rapport à l’ID utilisateur effectif. L’ID de groupe effectif, ainsi que tous les ID de groupe supplémentaires, sont testés par rapport aux entrées ACL_GROUP_OBJ et ACL_GROUP.
ACL VALIDES
Une ACL valide contient exactement une entrée avec chacun des types d’indicateur ACL_USER_OBJ, ACL_GROUP_OBJ et ACL_OTHER. Les entrées avec les indicateurs de type ACL_USER et ACL_GROUP peuvent apparaître zéro ou plusieurs fois dans une ACL. Une ACL qui contient des entrées des indicateurs de type ACL_USER ou ACL_GROUP doit contenir exactement une entrée du type d’indicateur ACL_MASK. Si une ACL ne contient aucune entrée des types d’indicateur ACL_USER ou ACL_GROUP, l’entrée ACL_MASK est facultative.
Tous les identifiants d’utilisateur doivent être uniques parmi toutes les entrées du type de balise ACL_USER, et tous les identifiants de groupe doivent être uniques parmi toutes les entrées du type de balise ACL_GROUP.
La fonction acl_get_file() renvoie une ACL avec zéro entrée ACL en tant qu’ACL par défaut d’un répertoire, si le répertoire n’est pas associé à une ACL par défaut. La fonction acl_set_file() accepte également une ACL avec zéro entrée ACL en tant qu’ACL par défaut valide pour les répertoires, indiquant que le répertoire ne doit pas être associé à une ACL par défaut. Ceci équivaut à utiliser la fonction acl_delete_def_file().
CORRESPONDANCE ENTRE LES ENTRÉES ACL ET LES BITS DE PERMISSION DE FICHIER
Les permissions définies par les ACL sont un sur-ensemble des permissions spécifiées par les bits de permission de fichier.
Il existe une correspondance entre les permissions du propriétaire, du groupe et des autres, et des entrées ACL spécifiques : les permissions du propriétaire correspondent aux permissions de l’entrée ACL_USER_OBJ. Si l’ACL possède une entrée ACL_MASK, les permissions du groupe correspondent aux permissions de l’entrée ACL_MASK. Sinon, si l’ACL ne possède 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 permissions de l’entrée ACL_OTHER.
Les permissions du propriétaire, du groupe et des autres correspondent toujours aux permissions de l’entrée ACL correspondante. La modification des bits de permission de fichier entraîne la modification des entrées ACL associées, et la modification de ces entrées ACL entraîne la modification des bits de permission de fichier.
CRÉATION D’OBJET ET ACL PAR DÉFAUT
L’ACL d’accès d’un objet de fichier est initialisée lors de la création de l’objet avec l’une des fonctions creat(), mkdir(), mknod(), mkfifo() ou open(). Si une ACL par défaut est associée à un répertoire, le paramètre mode des fonctions créant des objets de fichier et l’ACL par défaut du répertoire sont utilisés pour déterminer l’ACL de l’objet :
Le nouvel objet hérite de l’ACL par défaut du répertoire contenant comme son ACL d’accès.
Les entrées ACL d’accès correspondant aux bits de permission de fichier sont modifiées de sorte qu’elles ne contiennent aucune permission qui n’est pas contenue dans les permissions spécifiées par le paramètre mode.
Si aucune ACL par défaut n’est associée à un répertoire, le paramètre mode des fonctions créant des objets de fichier et le masque de création de fichier (voir umask(2)) sont utilisés pour déterminer l’ACL de l’objet :
Le nouvel objet reçoit une ACL d’accès contenant des entrées des types de balises ACL_USER_OBJ, ACL_GROUP_OBJ et ACL_OTHER. Les permissions de ces entrées sont définies sur les permissions spécifiées par le masque de création de fichier.
Les entrées ACL d’accès correspondant aux bits de permission de fichier sont modifiées de sorte qu’elles ne contiennent aucune permission qui n’est pas contenue 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, en écriture ou en exécution/recherche à un objet de fichier protégé par une ACL. L’algorithme de vérification d’accès détermine si l’accès à l’objet sera accordé.
Si l'ID utilisateur effectif du processus correspond à l'ID utilisateur de l'objet fichier, alors
si l'entrée ACL_USER_OBJ contient les autorisations demandées, l'accès est accordé,
sinon l'accès est refusé.
sinon, si l'ID utilisateur effectif du processus correspond au qualificateur de toute entrée de type
ACL_USER, alors
si l'entrée ACL_USER correspondante et l'entrée ACL_MASK contiennent les autorisations demandées, l'accès est accordé,
sinon l'accès est refusé.
sinon, si l'ID de groupe effectif ou l'un des ID de groupe secondaires du processus correspond au
groupe du fichier ou au qualificateur de toute entrée de type ACL_GROUP, alors
si l'ACL contient une entrée ACL_MASK, alors
si l'entrée ACL_MASK et l'une des entrées ACL_GROUP_OBJ ou ACL_GROUP correspondantes
contiennent les autorisations demandées, l'accès est accordé,
sinon l'accès est refusé.
sinon (notez qu'il ne peut y avoir aucune entrée ACL_GROUP sans entrée ACL_MASK)
si l'entrée ACL_GROUP_OBJ contient les autorisations demandées, l'accès est
accordé,
sinon l'accès est refusé.
sinon, si l'entrée ACL_OTHER contient les autorisations demandées, l'accès est accordé.
sinon l'accès est refusé.
FORMES TEXTUELLES DE L'ACL
Une forme textuelle longue et une forme textuelle courte pour représenter les ACL sont définies. Dans les deux formes, les entrées de l'ACL sont
représentées sous forme de trois champs séparés par deux points : un type de balise d'entrée ACL, un qualificateur d'entrée ACL et
les autorisations d'accès discrétionnaires. Le premier champ contient l'un des mots-clés suivants pour le type de balise d'entrée :
user Une entrée ACL utilisateur spécifie l'accès accordé soit au propriétaire du fichier (type de balise d'entrée
ACL_USER_OBJ), soit à un utilisateur spécifié (type de balise d'entrée ACL_USER).
group Une entrée ACL de groupe spécifie l'accès accordé soit au groupe du fichier (type de balise d'entrée
ACL_GROUP_OBJ), soit à un groupe spécifié (type de balise d'entrée ACL_GROUP).
mask Une entrée de masque ACL spécifie l'accès maximal qui peut être accordé par toute entrée ACL
sauf l'entrée utilisateur pour le propriétaire du fichier et l'entrée « autre » (type de balise d'entrée
ACL_MASK).
other Une entrée « autre » ACL spécifie l'accès accordé à tout processus qui ne correspond pas
à une entrée ACL utilisateur ou de groupe (type de balise d'entrée ACL_OTHER).
Le deuxième champ contient l'identifiant utilisateur ou de groupe de l'utilisateur ou du groupe associé à l' entrée ACL pour les entrées de type de balise d'entrée ACL_USER ou ACL_GROUP, et est vide pour toutes les autres entrées. Un identifiant utilisateur peut être un nom d'utilisateur ou un numéro d'ID utilisateur sous forme décimale. Un identifiant de groupe peut être un nom de groupe ou un numéro d'ID de groupe sous forme décimale.
Le troisième champ contient les autorisations d'accès discrétionnaires. Les autorisations de lecture, d'écriture et de recherche/exécution sont représentées par les caractères r, w et x, dans cet ordre. Chacun de ces caractères est remplacé par le caractère - pour indiquer qu'une autorisation est absente dans l'entrée ACL. Lors de la conversion de la forme textuelle à la représentation interne, les autorisations qui sont absentes n'ont pas besoin d'être spécifiées.
Des espaces blancs sont autorisés au début et à la fin de chaque entrée ACL, ainsi qu'immédiatement avant et après un séparateur de champ (le caractère deux-points).
FORMULAIRE LONG
Le formulaire long contient une entrée ACL par ligne. De plus, un signe dièse (#) peut commencer un commentaire qui s'étend jusqu'à la fin de la ligne. Si une entrée ACL de type ACL_USER, ACL_GROUP_OBJ ou ACL_GROUP contient des autorisations qui ne sont pas également contenues dans l'entrée ACL_MASK, l'entrée est suivie d'un signe dièse, de la chaîne « effective: » et des autorisations d'accès effectives définies par cette entrée. Voici un exemple du formulaire long :
user::rw
user:lisa:rw- #effective:r- group::r- group:toolies:rw- #effective:r- mask::r- other::r-
FORMULAIRE COURT
Le formulaire court est une séquence d'entrées ACL séparées par des virgules, et il est utilisé pour la saisie. Les commentaires ne sont pas pris en charge. Les mots-clés du type d'entrée peuvent apparaître sous leur forme complète non abrégée, ou sous leur forme abrégée d'une seule lettre. L'abréviation pour l'utilisateur est « u », l'abréviation pour le groupe est « g », l'abréviation pour le masque est « m », et l'abréviation pour l'autre est « o ». Les autorisations peuvent contenir au plus un seul des caractères suivants dans n'importe quel ordre : r, w, x. Voici des exemples du formulaire court :
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
JUSTIFICATION
Le projet IEEE 1003.1e 17 définit des listes de contrôle d'accès qui incluent des entrées de type ACL_MASK, et définit une correspondance entre les bits de permission de fichier qui n'est pas constante. Le groupe de travail standard a défini cette interface relativement complexe afin de garantir que les applications conformes à la norme IEEE 1003.1 (« POSIX.1 ») continueront de fonctionner comme prévu sur les systèmes dotés d'ACL. Le projet IEEE 100.1e 17 contient la justification du choix de cette interface dans la section B.23.
MODIFICATIONS DES UTILITAIRES DE FICHIER
Sur un système qui prend en charge les ACL, les utilitaires de fichier ls(1), cp(1) et mv(1) modifient leur comportement de la manière suivante :
Pour les fichiers qui ont une ACL par défaut ou une ACL d'accès qui contient plus de trois entrées ACL requises, l'utilitaire ls(1) dans le formulaire long produit par ls -l affiche un signe plus (+) après la chaîne de permission.
Si l'option -p est spécifiée, l'utilitaire cp(1) conserve également les ACL. Si cela n'est pas possible, un avertissement est produit.
L'utilitaire mv(1) conserve toujours les ACL. Si cela n'est pas possible, un avertissement est produit.
L'effet de l'utilitaire chmod(1) et de l'appel système chmod(2) sur l'ACL d'accès est décrit dans « CORRESPONDANCE ENTRE LES ENTRÉES ACL ET LES BITS DE PERMISSION DE FICHIER ».
NORMES
Le document IEEE 1003.1e 17 (« POSIX.1e ») décrit plusieurs extensions de sécurité de la norme IEEE 100.1. Bien que les travaux sur 1003.1e aient été abandonnés, de nombreux systèmes de type UNIX mettent en œuvre des parties du projet POSIX.1e 17, ou des versions antérieures du projet.
Les listes de contrôle d'accès (ACL) de Linux mettent en œuvre l'ensemble des fonctions et des utilitaires définis pour les listes de contrôle d'accès dans la norme POSIX.1e, ainsi que plusieurs extensions. L'implémentation est entièrement conforme à la version provisoire 17 de la norme POSIX.1e ; les extensions sont indiquées comme telles. Les fonctions de manipulation des listes de contrôle d'accès sont définies dans la bibliothèque ACL (libacl, -lacl). Les interfaces conformes à la norme POSIX sont déclarées dans l'en-tête
NOTES
PERMISSIONS REFUSÉES ET ESPACES DE NOMS D'UTILISATEUR LINUX
Bien que les ACL puissent être utilisées pour refuser des permissions à des processus en fonction des groupes auxquels ils appartiennent, cela est considéré comme une mauvaise pratique. Les assistants privilégiés tels que newuidmap(1) peuvent donner aux processus non privilégiés accès à l'appel système setgroups(2), ce qui leur permet de supprimer les appartenances aux groupes secondaires et de rendre inefficaces les restrictions basées sur cette appartenance. Pour plus de détails, voir user_namespaces(7).
VOIR AUSSI
chmod(1), creat(2), getfacl(1), ls(1), mkdir(2), mkfifo(2), mknod(2), mount(8), open(2), setfacl(1), stat(2), umask(1)
NORME POSIX 1003.1e VERSION PROVISOIRE 17
https://wt.tuxomania.net/publications/posix.1e/download.html
FONCTIONS POSIX 1003.1e PAR CATÉGORIE
Gestion du stockage des ACL
acl_dup(3), acl_free(3), acl_init(3)
Manipulation des entrées ACL
acl_copy_entry(3), acl_create_entry(3), acl_delete_entry(3), acl_get_entry(3), acl_valid(3)
acl_add_perm(3), acl_calc_mask(3), acl_clear_perms(3), acl_delete_perm(3),
acl_get_permset(3), acl_set_permset(3)
acl_get_qualifier(3), acl_get_tag_type(3), acl_set_qualifier(3), acl_set_tag_type(3)
Manipulation des ACL sur un objet
acl_delete_def_file(3), acl_get_fd(3), acl_get_file(3), acl_set_fd(3), acl_set_file(3)
Traduction du format des ACL
acl_copy_entry(3), acl_copy_ext(3), acl_from_text(3), acl_to_text(3), acl_size(3)
FONCTIONS POSIX 1003.1e PAR DISPONIBILITÉ
Le premier groupe de fonctions est pris en charge sur la plupart des systèmes dotés de listes de contrôle d'accès de type POSIX, tandis que le deuxième groupe est pris en charge sur un nombre plus restreint de systèmes. Pour les applications qui seront portées, il est préférable d'éviter le deuxième groupe.
acl_delete_def_file(3), acl_dup(3), acl_free(3), acl_from_text(3), acl_get_fd(3),
acl_get_file(3), acl_init(3), acl_set_fd(3), acl_set_file(3), acl_to_text(3), acl_valid(3)
acl_add_perm(3), acl_calc_mask(3), acl_clear_perms(3), acl_copy_entry(3), acl_copy_ext(3),
acl_copy_int(3), acl_create_entry(3), acl_delete_entry(3), acl_delete_perm(3), acl_get_entry(3),
acl_get_permset(3), acl_get_qualifier(3), acl_get_tag_type(3), acl_set_permset(3),
acl_set_qualifier(3), acl_set_tag_type(3), acl_size(3)
EXTENSIONS LINUX
Ces extensions non portables sont disponibles sur les systèmes Linux.
acl_check(3), acl_cmp(3), acl_entries(3), acl_equiv_mode(3), acl_error(3), acl_extended_fd(3),
acl_extended_file(3), acl_extended_file_nofollow(3), acl_from_mode(3), acl_get_perm(3),
acl_to_any_text(3)
AUTEUR
Andreas Gruenbacher, <_>