Info16.fr

Le blog de B@rtounet

#Gnu/Linux

Initiation aux ACL

27 juillet 2011 Rédigé par bartounet

Tout le monde connait le système de droits utilisé sous linux, mais on connait moins les ACL qui permettent une gestion plus fine des droits sous linux. Pour résumer: Une ACL, ou Access Control List (en anglais : « liste de contrôle d'accès ») est, une liste de permissions sur un fichier, un répertoire ou une arborescence, ajoutée aux permissions « classiques »

Faisons un bref résumé des droits classiques unix/linux. Chaque fichier ne peut normalement indiquer des permissions que pour un seul utilisateur et un seul groupe, qui s'opposent à une unique catégorie correspondant à « tous les autres » (ou « le reste du monde »).

Par exemple:

drwxr-xr-x 2 laptop laptop 4096 2007-09-01 13:23 fichier

Ici quand on connait bien c'est très parlant:

on peut diviser les droits en d wxr r-x r-x

d = pour dire qu'il sagit d'un repertoire (si c'et un fichier on aurait -)

wxr pour le propriétaire

r-x pour le groupe

r-x pour les autres

r pour read, w pour write, x pour execution

on a donc le proprétaire en l'occurence laptop qui a tous les droit (rwx)

le groupe en l'occurence le groupe nommé laptop qui a les droits de lecture et d'execution (r-x)

les autres en l'occurence le reste du monde qui a les droits de lecture et d'execution (r-x)

Il est aussi utile de connaitre la nomenclature chiffre des droit linux:

r = 4 w= 2 x= 1

Pour chaque entité on peut alors donner des droits en chiffre

Par exemple :

 laptop@laptop:~/test1$ ls -al total 12 drwxr-xr-x  3 laptop laptop 4096 2007-09-01 13:33 . drwxr-xr-x 27 laptop laptop 4096 2007-09-01 13:33 .. drwxr-xr-x  2 laptop laptop 4096 2007-09-01 13:33 test laptop@laptop:~/test1$ chmod 777 test/ laptop@laptop:~/test1$ ls -al total 12 drwxr-xr-x  3 laptop laptop 4096 2007-09-01 13:33 . drwxr-xr-x 27 laptop laptop 4096 2007-09-01 13:33 .. drwxrwxrwx  2 laptop laptop 4096 2007-09-01 13:33 test laptop@laptop:~/test1$ chmod 721 test/ laptop@laptop:~/test1$ ls -al total 12 drwxr-xr-x  3 laptop laptop 4096 2007-09-01 13:33 . drwxr-xr-x 27 laptop laptop 4096 2007-09-01 13:33 .. drwx-w---x  2 laptop laptop 4096 2007-09-01 13:33 test

Par addition des chiffres on donne les droits que l'on veut:

chmod 777 test :donnera rwx rwx rwx obtenu grace à : ( 4+2+1=7 4+2+1=7 4+2+1=7)

chmod 721 test :donnera rwx -w- --x obtenu grace à: (4+2+1=7 0+2+0=2 0+0+1=1)

Enfin bref on pourrait déjà parler des heures sur les droits de bases sous linux.

Interessons nous plus particulièrement aux ACL.

Déjà deux choses à indispensables:

1- Avoir le paquet ACL d'installé sur votre système.

2- Avoir un systeme de fichier monté avec l'option ACL

# /etc/fstab: static file system information. # # <file system> <mount point>   <type>  <options>       <dump>  <pass> proc            /proc           proc    defaults        0       0 /dev/hda2       /               ext3    defaults,acl,errors=remount-ro 0       1

Deux commandes fondamentales pour les ACL:

setfacl et getfacl

setfacl

Le nom de la commande se comprend set file's ACL (« régler l'ACL du fichier »). Elle possède de nombreuses options dont il convient de prendre connaissance en consultant la page de manuel (man setfacl). La commande fonctionne bien sûr aussi de manière récursive (option -R) :

On va modifier les droits grace à cette commande:

Un exemple concret:

L'utilisateur laptop possède des dossier dans son home qui de base on les permissions rwx r-x r-x (ou 755 rapellez vous)

A chaque repertoire crée il prend ces droits par défaut.

 laptop@laptop:~/test1$ ls -al total 12 drwxr-xr-x  3 laptop laptop 4096 2007-09-01 13:53 . drwxr-xr-x 27 laptop laptop 4096 2007-09-01 13:33 .. drwxr-xr-x  2 laptop laptop 4096 2007-09-01 13:53 travail

Pourtant il absolument besoin que lui et l'utilisateur antony travaille conjointement dans le meme repertoire, il a besoin que lui et antony puisse ajouter des fichier dans ce repertoire.

De base c'est impossible puisque antony n'est pas le propriétaire et ne fait pas non plus partie du groupe laptop.

Donc pour l'intant seul laptop peut ecrire dans le répertoire travail.

Bien sur une solution serait de donner les droits d'écriture au groupe laptop et faire d'antony un membre de ce groupe.

Mais pas de chance laptop ne veut absolument pas que ce repertoire travail puisse etre modifié par certaine personne appartenant à ce groupe...

Comment faire ???

C'est la qu'interviennent les ACL

on va accorder a antony et seulement à lui les droits d'écriture dans ce repertoire.

laptop@laptop:~/test1$ setfacl -m u:antony:rwx travail/

On a maintenant:

laptop@laptop:~/test1$ ls -al total 16 drwxr-xr-x   3 laptop laptop 4096 2007-09-01 13:53 . drwxr-xr-x  27 laptop laptop 4096 2007-09-01 13:33 .. drwxrwxr-x+  2 laptop laptop 4096 2007-09-01 13:53 travai

On voit qu'un + apparait montrant qu'une ACL est mise en place pour ce repertoire.

Pour en savoir plus on va utiliser la fameuse commande getfacl

drwxrwxr-x+  2 laptop laptop 4096 2007-09-01 13:53 travail laptop@laptop:~/test1$ getfacl travail/ # file: travail # owner: laptop # group: laptop user::rwx user:antony:rwx group::r-x mask::rwx other::r-x

On voit bien que cette fois antony a tous les droits sur ce repertoire, il peut donc creer et modifier des fichier comme il veut.

Les principaux paramètres à connaître sont :     * préfixes :           o u: (droits pour un utilisateur, nommé ou désigné par son uid) ;           o g: (droits pour un groupe, nommé ou désigné par son gid) ;           o o: (droits pour other, le reste du monde) ;     * permissions : elles sont codées dans l'ordre r, w et x ou X (ce dernier représentant, comme avec chmod, le droit d'entrée dans les répertoires ou celui d'exécution pour les fichiers qui ont déjà un marqueur x). On les remplace par - pour une interdiction explicite. Ne pas mentionner un droit revient aussi à une interdiction :

Dans l'exemple vu plus haut on a malheureusement une limitation:

En effet Antony, à le droit de creer des repertoire et des fichier dans le dossier travail, mais regardez le comportement:

laptop@laptop:~/test1$ ls travail laptop@laptop:~/test1$ cd travail/ laptop@laptop:~/test1/travail$ ls fic laptop@laptop:~/test1/travail$ rm -rf fic laptop@laptop:~/test1/travail$ touch fic1 laptop@laptop:~/test1/travail$ getfacl fic1 # file: fic1 # owner: laptop # group: laptop user::rw- group::r-- other::r--

On s'apercoit que si laptop creer un fichier dans le dossier travail, il n'herite pas des ACL su dossier parent :

D'ou probleme antony ne pourra pas modifier ce fichier:

Pour pallier à ce problême:

On peut modifier ce comportement en ajoutant, aux répertoires seulement, un attribut default, codé d:, qui se transmet à tous les

fichiers créés dans le répertoire après l'ajout de l'ACL par défaut. Par exemple, setfacl -m d:u:antony:rwx travail donne à luce les droits

de lecture et écriture (ainsi qu'« exécution » quand il s'agit de répertoires) pour tous les fichiers qui seront créés sous travail à partir

de ce moment, jusqu'à ce que cette ACL « par défaut » soit annulé ou remplacé.

exemple: de base :

laptop@laptop:~/test1$ getfacl travail/ # file: travail # owner: laptop # group: laptop user::rwx user:antony:rwx group::r-x mask::rwx other::r-x laptop@laptop:~/test1$ cd travail/ laptop@laptop:~/test1/travail$ getfacl fic1 # file: fic1 # owner: laptop # group: laptop user::rw- group::r-- other::r--

On utilise alors plutot la commande : setfacl -m d:u:antony:rwx travail/

laptop@laptop:~/test1$ setfacl -m d:u:antony:rwx travail/ laptop@laptop:~/test1$ getfacl travail/ # file: travail # owner: laptop # group: laptop user::rwx user:antony:rwx group::r-x mask::rwx other::r-x default:user::rwx default:user:antony:rwx default:group::r-x default:mask::rwx default:other::r-x laptop@laptop:~/test1/travail$ touch fic2 laptop@laptop:~/test1/travail$ getfacl fic2 # file: fic2 # owner: laptop # group: laptop user::rw- user:antony:rwx                 #effective:rw- group::r-x                      #effective:r-- mask::rw- other::r--

On voit bien que le nouveau fichier fic2 crée a bien hérité des droits de travail.

On ne peut pas parler des acl sans parler du mask:

Le masque est une synthèse des valeurs les plus permissives que possède un fichier doté d'une ACL. Les droits de l'utilisateur

fondamental ne sont cependant pas pris en compte. Le masque est calculé automatiquement :

L'intérêt du masque est de pouvoir limiter d'un coup toutes les permissions d'un fichier (étendues ou non), sauf celles du propriétaire ;

on utilise pour cela le préfixe m: suivi du droit maximal à accorder :

Exemple :

l

aptop@laptop:~/test1/travail$ setfacl -m u:antony:rwx fic1 laptop@laptop:~/test1/travail$ getfacl fic1 # file: fic1 # owner: laptop # group: laptop user::rw- user:antony:rwx group::r-- mask::rwx other::r--

On définit une acl sur fic1 pour antony afin qu'il est les droit rwx

 
laptop@laptop:~/test1/travail$ setfacl -m m:r fic1 laptop@laptop:~/test1/travail$ getfacl fic1 # file: fic1 # owner: laptop # group: laptop user::rw- user:antony:rwx                 #effective:r-- group::r-- mask::r-- other::r--

On voit bien qu'après avoir défini un mask (r--) Les droits effectif d'antony sur le fichier sont limités à ceux du mask.

Source: http://www.lea-linux.org

Information sur bartounet auteur de l'article

Les commentaires sont fermés.