Access Control List

Niveau : Star Star Empty Empty Empty
Résumé : getfacl ; setfacl

ACL

Faire des groupes c'est bien, mais après quelques expériences, gérer plusieurs groupes d'utilisateurs sur une machine peut rapidement devenir un cauchemar.

Tant qu'il n'y a qu'une seule équipe, tout est jouable, on fait des groupes en fonction des droits dans cette équipe, et on attribue aux éventuels démons (apache, ftpd ... ) les groupes correspondants.

Dès qu'on se retrouve avec plusieurs équipes, une bonne gestion de la sécurité devient impossible. Supposons que vous vouliez donner accès à un fichier au groupe A et au groupe B, dans ce cas il faut faire un troisième groupe contenant les membres de A et de B. Il faut faire intervenir l'administrateur et ça devient rapidement l'horreur à maintenir.

C'est pourquoi on a inventé les ACL sur les systèmes de fichier. Grâce aux ACL, vous pourrez :

  • définir plusieurs utilisateurs et groupes ayant des accès différents à un fichier donné (plus de bidouille des membres de groupes)
  • définir les droits qui seront positionnés lors de la création d'un fichier dans un répertoire (plus de bidouille avec le bit suid, ni d'umask)

Les ACL c'est la fin de la bidouille dans la gestion des droits sur les fichiers !

Recette

Pour que les ACL fonctionnent chez vous, il vous faut :

  • le paquet ACL qui fournit les commande setfacl et getfacl
  • le support des ACL dans le système de fichier qui vous intéresse : ext2, ext3, ext4, reiserfs, jfs, xfs, nfs
  • le support compilé dans le noyau : en option pour chacun des système de fichier
  • le préciser lors du montage de la partition : mount -o acl ou defaults,acl dans fstab

Action

Les ACL se lisent et se modifient assez facilement : Lecture avec getfacl :

$ getfacl fichier

Modification avec setfacl :

$ setfacl -m u::rwx fichier

Il ne reste plus qu'à connaître le format des ACL, très simple : [default:]<type>:<nom>:<droits>

  • type a plusieurs valeurs possibles :
    • user ou u : les droits s'appliquent à un utilisateur spécifique
    • group ou g : les droits s'appliquent à un groupe spécifique
    • other ou o : les droits s'appliquent en l'absence de correspondance (le nom est ignoré)
    • mask ou m : les droits sont les droits maximum possible sur ce fichier (le nom est ignoré)
  • nom peut être vide ou être un nom d'utilisateur ou de groupe. Lorsqu'il n'est pas spécifié, il indique le propriétaire naturel "unix" du fichier
  • droits est la valeur habituelle des droits tels que vous les connaissez : rwx (Read, Write, eXecute)
  • si default ou d est présent, il indique que les droits seront appliqués aux fichiers créés dans ce répertoire (ne marche que pour un répertoire)

Et voila, c'est extrêmement simple non ?

Exemples

Je veux que jeremy accède en lecture à mon fichier lenna.jpg :

$ setfacl -m u:jeremy:r lenna.jpg

Je veux que les administrateurs aient accès en écriture au contenu du répertoire /usr/local/etc

$ setfacl -R -m g:admin:rw /usr/local/etc

Je veux que jeremy n'ait plus accès à mon fichier lenna.jpg

$ setfacl -x u:jeremy lenna.jpg

Je veux que tous les fichiers créés dans /tmp aient un droit de lecture pour l'utilisateur peck

$ setfacl -m d:u:peck:r /tmp
Vus : 254
Publié par Peck : 100