Gestion des accès aux fichiers : ACL


Vous êtes ici : Support technique -> Stockage -> Gestion des accès aux fichiers : ACL.


Les Droits Unix

Les droits Unix permettent de donner des droits d'accès différents en lecture, écriture et/ou exécution aux catégories suivantes :

Il suffit d'utiliser la commande chmod pour modifier les droits Unix (pour plus d'information voir man chmod).
La plupart du temps, les droits Unix vous suffiront. Mais en utilisant les droits ACL (Access Control List), vous pourrez contrôler les accès à vos données plus finement.

Les ACL

Ainsi, si l'on désire donner des droits d'accès à un utilisateur et/ou un groupe particulier, on peut définir une ACL (Access Control List) sur le fichier ou le répertoire voulu.
La syntaxe générale est la suivante (pour plus d'information, voir le man setfacl) :
      setfacl ACL_OPTIONS repertoire
ACL_OPTIONS peut avoir l'une des formes suivantes :

Remarques importantes :

Visualisation des ACL

La commande getfacl (pour plus d'information, voir le man getfacl) donne un affichage détaillé des droits ACL positionnés sur un répertoire ou un fichier :
     getfacl repertoire

Rappel : L'option -l de ls permet d'afficher les droits Unix classiques mais aussi de voir si des ACL sont positionnés (un signe + apparaît juste après les droits Unix).


rlab000-gaya : ls -ld repertoire_avec_acl repertoire_sans_acl
drwxr-x---+ 2 rlab000 lab  8192 2010-03-29 11:00 repertoire_avec_acl
drwxr-x---  2 rlab000 lab  8192 2010-03-29 11:00 repertoire_sans_acl

rlab000-gaya : ls -l fichier_avec_acl fichier_sans_acl
-rwx------+ 2 rlab000 lab  8192 2010-03-29 11:00 fichier_avec_acl
-rwx------  2 rlab000 lab  8192 2010-03-29 11:00 fichier_sans_acl

Ajout de droits ACL à un utilisateur particulier

Par exemple, rlab000 veut donner des droits particuliers à l'utilisateur rext000 pour accéder à son HOME sur Gaya.
rlab000-gaya : cd $HOME
rlab000-gaya : setfacl --set=u::rwx,u:rext000:rwx,g::r-x,o::---,m::rwx .
rlab000-gaya : getfacl .
# file: .
# owner: rlab000
# group: lab
user::rwx
user:rext000:rwx
group::r-x
mask::rwx
other::---

ATTENTION :

Ajout de droits ACL à un groupe particulier

Par exemple, rlab000 veut donner des droits particuliers à un groupe ext pour accéder à son HOME sur Gaya.
rlab000-gaya : cd $HOME
rlab000-gaya : setfacl --set=u::rwx,g::r-x,g:ext:r-x,o::---,m::rwx .
rlab000-gaya : getfacl .
# file: .
# owner: rlab000
# group: lab
user::rwx
group::r-x
group:ext:r-x
mask::rwx
other::---

ATTENTION :

Mise à jour d'une ACL

Pour modifier les droits ACL, vous pouvez utiliser la commande setfacl avec soit : Notez qu'il faut toujours au moins spécifier les champs u::rwx, g::..., o::--- et ne pas oublier le mask m::rwx pour être sûr que les ACL positionnés pour le(s) groupe(s) spécifié(s) (dans l'exemple ci-dessous ext et grp) soient réellement effectifs.

Dans un premier temps, on positionne des ACL pour le groupe ext :


rlab000-gaya : cd $HOME
rlab000-gaya : setfacl --set=u::rwx,g::r-x,g:ext:r-x,o::---,m::rwx .
rlab000-gaya : getfacl .
# file: .
# owner: rlab000
# group: lab
user::rwx
group::r-x
group:ext:r-x
mask::rwx
other::---

Puis on modifie les ACL en changeant de groupe :
rlab000-gaya : setfacl --set=u::rwx,g::r-x,g:grp:r-x,o::---,m::rwx .
rlab000-gaya : getfacl .
# file: .
# owner: rlab000
# group: lab
user::rwx
group::r-x
group:grp:r-x
mask::rwx
other::---

Cette fois, on modifie les ACL en ajoutant un second groupe :
rlab000-gaya : setfacl -m u::rwx,g::r-x,g:ext:r-x,o::---,m::rwx .
rlab000-gaya : getfacl .
# file: .
# owner: rlab000
# group: lab
user::rwx
group::r-x
group:grp:r-x
group:ext:r-x
mask::rwx
other::---

Supression d'une ACL

Pour supprimer les droits ACL, vous pouvez utiliser la commande setfacl avec l'option -b :
rlab000-gaya : cd $HOME
rlab000-gaya : getfacl .
# file: .
# owner: rlab000
# group: lab
user::rwx
group::r-x
group:ext:r-x
mask::rwx
other::---

rlab000-gaya : setfacl -b .
rlab000-gaya : ls -ld .
drwxr-x---  2 rlab000 lab  8192 2010-03-29 11:00 .
rlab000-gaya : getfacl .
# file: .
# owner: rlab000
# group: lab
user::rwx
group::r-x
other::---

Conseils sur l'utilisation des ACL

Nous vous conseillons de placer des ACL uniquement sur votre répertoire HOME pour en filtrer l'accès et de positionner ensuite les droits Unix sur les fichiers et répertoires qu'il contient à l'aide de chmod.

Par exemple, nous sommes sous le compte rlab000 sur Gaya :


rlab000-gaya : cd $HOME
rlab000-gaya : setfacl --set=u::rwx,u:raaa000:rwx,g::r-x,g:bbb:r-x,o::---,m::rwx .
rlab000-gaya : chmod 757 file
rlab000-gaya : ls -ld . file
drwxrwx---+ 0 rlab000 lab 4096 2010-03-30 11:46 .
-rwxr-xrwx  0 rlab000 lab 1000 2010-03-30 11:46 file

rlab000-gaya : getfacl .
# file: .
# owner: rlab000
# group: lab
user::rwx
user:raaa000:rwx
group::r-x
group:bbb:r-x
other::---

Si on analyse ces droits d'accès, on voit que :
  1. L'utilisateur raaa000 a les droits ACL rwx sur le HOME et les droits Unix rwx (champs other) sur file. Il peut ainsi accéder en lecture et écriture au fichier file contenu dans le HOME de rlab000. Notez qu'il peut aussi créer de nouveaux fichiers et des répertoires sous le HOME de rlab000 (droits ACL). De plus, il peut aussi modifier le contenu des sous-répertoires pour lesquels les droits Unix (champs other) l'y autorisent.
  2. Le groupe propriétaire (lab) a les droits ACL r-x sur le HOME et les droits Unix r-x (champs group) sur file. Les membres du groupe lab peuvent donc lire le fichier mais pas l'écrire (donc pas le modifier). De plus, ils ne peuvent rien créer directement sous le HOME de rlab000 (droits ACL). Mais ils peuvent aussi modifier le contenu des sous-répertoires pour lesquels les droits Unix (champs group) les y autorisent.
  3. par contre le groupe bbb a les droits ACL r-x sur le HOME et les droits Unix rwx (champs other) sur file. Les membres du groupe bbb peuvent donc traverser le HOME et lire ou écrire (donc modifier ou écraser) file, ce qui n'était peut-être pas souhaité. Mais, comme lab, ils ne peuvent rien créer directement sous le HOME de rlab000 (droits ACL). Mais ils peuvent aussi modifier le contenu des sous-répertoires pour lesquels les droits Unix (champs other) les y autorisent.
  4. Pour éviter que le groupe bbb puisse écraser file, on peut être tenté de supprimer le droit Unix d'écriture dans le champs other (chmod 755 file). Mais ceci empècherait aussi raaa000 de modifier le fichier.
  5. Dans ce cas, il faut positionner des ACL sur file aussi :
       rlab000-gaya : setfacl --set=u::rwx,u:raaa000:rwx,g::r-x,g:bbb:r-x,o::---,m::rwx file
    
       rlab000-gaya : getfacl file
       # file: file
       # owner: rlab000
       # group: lab
       user::rwx
       user:raaa000:rwx
       group::r-x
       group:bbb:r-x
       other::---
       

Dépendances ACL et droits Unix (pour utilisateurs avertis)

Il existe deux sortes de droits d'accès : les droits Unix classiques et les droits désignés par l'ACL. La commande setfacl modifie les droits ACL mais aussi les droits Unix. Par contre, la commande chmod ne modifie que certains champs de l'ACL.

Pour bien comprendre cette dépendance il faut détailler la fonctionnalité du masque d'une ACL (champ m::...). Les droits effectifs des utilisateurs concernés par les champs u:login:..., g::... et g:ext:... peuvent être en réalité restreints par les droits présents dans le masque.


© CNRS - IDRIS, 23/04/2012