Comment gérer les ACL sous Linux
Objectif
Introduction à la gestion des ACL (Access Control List) sous Linux
Système d’exploitation et versions logicielles
- Système d’exploitation : – Agnostique de la distribution Linux
Exigences
- Accès root sur une installation Linux fonctionnelle
- Connaissance du système d’autorisation discrétionnaire
- Un système de fichiers qui prend en charge les ACL (par exemple xfs, ext2, ext3, ext4), montés avec l’option 'acl'
- Avoir installé le paquet 'acl'
Difficulté
DOULEUR MOYENNE
Conventions
- # – nécessite que les commandes Linux données soient exécutées avec les privilèges root, soit directement en tant qu’utilisateur root, soit en utilisant la commande
sudo - $ – nécessite que des commandes Linux données soient exécutées en tant qu’utilisateur régulier non privilégié
Introduction
Dans ce tutoriel, nous allons voir ce que sont les ACL et comment effectuer la manipulation de base de ce type d’autorisations sur une plate-forme Linux. Les instructions ci-dessous fonctionneront sur n’importe quelle distribution Linux. Je suppose que vous savez et êtes à l’aise avec l’utilisation des permissions discrétionnaires standard de Linux ugo/rwx.
Alors, qu’est-ce qu’une ACL ?
Les ACL sont un deuxième niveau d’autorisations discrétionnaires, qui peuvent remplacer les autorisations standard ugo/rwx. Lorsqu’ils sont utilisés correctement, ils peuvent vous accorder une meilleure granularité dans la définition de l’accès à un fichier ou à un répertoire, par exemple en donnant ou en refusant l’accès à un utilisateur spécifique qui n’est ni le propriétaire du fichier, ni le propriétaire du groupe.
Commencer
La première chose que vous devez faire, si vous voulez tirer parti des ACL, est de vous assurer que le système de fichiers sur lequel vous voulez les utiliser a été monté avec l’option 'acl'. Pour vérifier ce dernier, vous pouvez exécuter la commande 'tune2fs -l', en passant la partition comme argument. Comme vous pouvez le voir en cours d’exécution (sortie tronquée) :
tune2fs -l /dev/sda3
donne le résultat suivant sur mon système, montrant que le système de fichiers sur /dev/sda3 a, parmi les options de montage par défaut, également 'acl'.
Si votre système de fichiers n’a pas été monté avec l’option 'acl', vous pouvez le remonter en donnant l’option nécessaire :
mount -o remount -o acl /dev/sda1
Cependant, notez que les options de montage définies de cette façon ne seront pas persistantes et ne survivront pas à un redémarrage. Si vous voulez obtenir la persistance, vous devez modifier les options de montage du système de fichiers dans /etc/fstab, en attribuant l’option 'acl' de manière statique.
Une autre chose dont nous avons besoin est d’installer le paquet acl. Ce paquet contient divers utilitaires d’ACL comme les programmes getfacl et setfacl.
Un cas d’essai
Voyons ce que les ACL peuvent faire pour nous. Tout d’abord, nous allons créer un fichier nommé text.cfg et nous le donnerons en argument à la commande getfacl. Voyons ce que montre le résultat de cette commande :
touch text.cfg && getfacl text.cfg
Comme vous pouvez le voir, puisque nous n’avons défini aucune autorisation ACL sur le fichier, la commande affiche simplement les valeurs d’autorisations standard, ainsi que le propriétaire du fichier et le propriétaire du groupe, tous deux disposant d’autorisations de lecture et d’écriture. Imaginons maintenant que nous voulions donner à un utilisateur spécifique (je vais créer cet utilisateur exprès et l’appeler mannequin ), un ensemble spécifique de privilèges sur le fichier. Il nous suffira de courir :
setfacl -m u:dummy:rw text.cfg
Analysons la commande : nous avons d’abord, bien sûr, le nom du programme setfacl, qui est assez explicite, puis nous avons passé l’option -m (abréviation de --modify) qui nous permet de changer les ACLs d’un fichier, puis les descriptions de permissions u :dummy :rw.
Nous avons trois 'sections' divisées par deux-points : dans la première, le u signifie utilisateur, spécifiant que nous voulons définir les ACL pour un utilisateur spécifique. Cela aurait pu être un g pour groupe, ou un o pour d’autres. Dans la deuxième section, nous avons le nom de l’utilisateur pour lequel nous voulons définir les autorisations, et dans la troisième, les autorisations à attribuer.
Enfin, le nom du fichier sur lequel nous voulons appliquer les autorisations.
Si nous essayons maintenant d’exécuter la commande 'getfacl', nous pouvons voir que sa sortie reflète les modifications que nous avons apportées :
getfacl text.cfg
Une entrée a été ajoutée pour l’utilisateur
factice, montrant les permissions que nous lui avons attribuées. En dehors de cela, si vous remarquez, une entrée pour masque est également apparue. Que signifie-t-il ? Le masque associé à une liste de contrôle d’accès limite l’ensemble des autorisations qui peuvent être attribuées sur le fichier pour les groupes et utilisateurs nommés et pour le propriétaire du groupe, mais n’a aucun effet sur les autorisations du propriétaire du fichier et de l’autre groupe d’autorisations.Dans ce cas, seules les autorisations de lecture et d’écriture peuvent être attribuées avec la commande setfacl. Bien sûr, nous pouvons changer cette option, en utilisant le programme setfacl lui-même :
setfacl -m mask:r text.cfg
Avec la commande ci-dessus, nous définissons le masque pour n’autoriser que les autorisations de lecture. Vérifions maintenant la sortie de getfacl :
getfacl text.cfg
Comme vous pouvez le voir, non seulement les modifications que nous avons apportées au masque sont désormais signalées, mais les autorisations effectives pour le propriétaire du groupe et le
mannequin d’utilisateur nommé sont également affichées. Bien que le propriétaire du groupe et l’utilisateur factice disposent des droits de lecture et d’écriture sur le fichier, en changeant le masque, nous avons effectivement limité leurs autorisations à la lecture seule. Comme le montre le résultat de la commande, ils ne sont désormais autorisés à lire que le fichier.En plus d’être explicitement modifié avec la commande ci-dessus, le masque des ACL est également automatiquement recalculé lorsque nous attribuons ou modifions des autorisations avec setfacl (sauf si l’option -n est spécifiée). Démontrons cela : nous allons changer les permissions de l’utilisateur factice en rwx, puis vérifier la sortie getfacl :
setfacl -m u:dummy:rwx text.cfg && getfacl text.cfg
Comme vous pouvez le voir, le masque a été recalculé et il reflète désormais les permissions maximales présentes pour le
mannequin d’utilisateur nommé. De toute évidence, puisqu’aucune autorisation précédemment définie n’est supérieure au masque, il n’est pas nécessaire d’afficher l’état de l’autorisation #effective.Vous pouvez également utiliser la liste de contrôle d’accès pour refuser complètement l’accès à un fichier à un utilisateur ou à un groupe nommé spécifique. Par exemple, en exécutant :
setfacl -m u:dummy:- text.cfg
Nous refusons effectivement tous les privilèges à l’utilisateur factice sur le fichier text.cfg.
ACL par défaut
La liste de contrôle d’accès par défaut est un type spécifique d’autorisation attribué à un répertoire, qui ne modifie pas les autorisations du répertoire lui-même, mais fait en sorte que les listes de contrôle d’accès spécifiées soient définies par défaut sur tous les fichiers créés à l’intérieur de celui-ci. Montrons-le : nous allons d’abord créer un répertoire et lui attribuer une liste de contrôle d’accès par défaut en utilisant l’option -d :
mkdir test && setfacl -d -m u:dummy:rw test
Maintenant, nous pouvons examiner la sortie du getfacl pour ce répertoire :
getfacl test
Les permissions
par défaut ont été attribuées correctement. Maintenant, nous pouvons les vérifier en créant un fichier à l’intérieur du répertoire de test et en vérifiant ses permissions en exécutant getfacl :touch test/file.cfg && getfacl test/file.cfg
Comme prévu, le fichier a été créé automatiquement et reçoit les permissions des listes de contrôle d’accès spécifiées ci-dessus.
Lorsque vous souhaitez effacer toutes les listes de contrôle d’accès définies, vous pouvez toujours exécuter la liste setfacl avec l’option -b.
Ce tutoriel couvre les principaux aspects des ACL, et bien sûr, il y a beaucoup plus à leur sujet, donc je suggère, comme toujours, de lire le manuel pour une connaissance plus approfondie. N’oubliez pas que si vous souhaitez supprimer toutes les autorisations d’ACL attribuées à un fichier, il vous suffit d’exécuter setfacl avec l’option -b (abréviation de --remove-all).