Dans certains cas on peut vouloir donner les droits de lecture
à certains users, les droits d'écriture
à d'autres, et enfin tout interdire à certains.
Lorsque la gestion des groupes ne suffit pas à solutionner
le problème, les ACL permettent de régler
finement les permissions.
Vérifions dans la configuration du noyau quels systèmes de fichiers sont aptes à gérer les ACL :
|
:~$ grep -i acl
/boot/config-`uname -r`
CONFIG_EXT2_FS_POSIX_ACL=y CONFIG_EXT3_FS_POSIX_ACL=y CONFIG_REISERFS_FS_POSIX_ACL=y CONFIG_JFS_POSIX_ACL=y CONFIG_FS_POSIX_ACL=y CONFIG_XFS_POSIX_ACL=y # CONFIG_NFS_V3_ACL is not set # CONFIG_NFSD_V3_ACL is not set |
Bien sûr, vfat ne gère pas les acl.
Pour pouvoir utiliser les ACL il faut d'abord les installer :
| :~$ sudo aptitude install acl |
Vérifions quels sont les utilitaires installés :I
|
:~$ dpkg -L acl
|grep bin/
/usr/bin/getfacl /usr/bin/setfacl /usr/bin/chacl |
Il faut aussi que la partition qui va utiliser les ACL soit montée avec l'option acl. Pour cela on édite /etc/fstab pour ajouter l'option, par exemple avec nano, ( sudo nano -w /etc/fstab ) ou l'éditeur de votre choix. Il pourrait y avoir par exemple dans fstab :
|
/dev/hda3
/media/hda3 ext3
defaults,acl 0 2
|
Ensuite on remonte la partition concernée, /crypt dans mon exemple :
|
:~$ sudo mount -v -a
-o remount /crypt
/dev/mapper/crypt on /crypt type ext3 (rw,acl) |
Pour le moment /crypt appartient à cep et au groupe
cep.
On va autoriser l'utilisateur epi à lire, écrire
et exécuter les fichiers qu'il pourra créer dans
ce répertoire :
| :~$ chacl u::rwx,u:epi:rwx,g::r-x,o::---,m::rwx /crypt/ |
Avec ls on vérifie la présence des acl :
| :~$ ls -ldh
/crypt/ drwxrwx---+ 81 cep
cep 3,0K 2006-09-15 09:34 /crypt/
|
le signe + indique la présence d'ACL
La commande getfacl permet de voir le détail des ACL posées sur un fichier ou un répertoire.
Avant d'utiliser la commande chacl, on avait :
|
:~$ getfacl /crypt
getfacl: Removing leading '/' from absolute path names # file: crypt # owner: cep # group: cep user::rwx group::r-x other::r-x |
Maintenant que l'on a étendu les droits
à l'utilisateur epi, on a :
|
:~$ etfacl /crypt/
getfacl: Removing
leading '/' from absolute path names
# file: crypt # owner: cep # group: cep user::rwx user:epi:rwx group::r-x mask::rwx other::--- |
Autre vérification avec l'option --tabular alors que l'on se trouve dans le répertoire /crypt ( le . ) :
|
:~$ /crypt$ getfacl
--tabular .
# file: .
USER cep rwx user epi rwx GROUP cep r-x mask rwx other --- |
Vérifions le fonctionnement des acl avec un user n'ayant pas les droits :
|
:~$ su - passant
Password: :~$ cd /crypt/ -su: cd: /crypt/: Permission non accordée |
Passant reste à la porte. Voyons maintenant avec epi, qui bénéficie des ACL :
|
:~$ su - epi
Password:
:~$ cd /crypt/ :/crypt$ touch mon_test ; ls -l mon_test -rw-r--r-- 1 epi epi 0 2006-09-18 16:08 mon_test |
On voit que le fichier appartient à epi, mais n'a
pas les acl (pas de +). Cela peut poser problème, on verra
comment résoudre cela en ajoutant les droits au groupe.
Mais si l'on veut modifier les droits pour tous les fichiers du
répertoire récursivement, il faudra ajouter
l'option -r.
Ne pas oublier de préciser les droits rwx pour le groupe ( g::rwx ), sinon le
propriétaire cep n'aura pas les droits de modification ou
copie sur les nouveaux fichiers créés par
l'utilisateur epi :
| :~$ sudo chacl -r u::rwx,u:epi:rwx,g::rwx,o::---,m::rwx /crypt/ |
On vérifie maintenant ce que donne la commande :
|
:/crypt$ getfacl .
# file: . # owner: cep # group: cep user::rwx user:epi:rwx group::rwx mask::rwx other::--- default:user::rwx default:user:epi:rwx default:group::r-x default:group:epi:rwx default:mask::rwx default:other::--- |
On peut aussi le vérifier sur un seul fichier :
|
:~$ chacl -l
/crypt/backup.log
/crypt/backup.log
[u::rwx,u:epi:rwx,g::rwx,m::rwx,o::---]
|
La commande setfacl sert aussi à positionner les acl sur un répertoire ou un fichier.
Par exemple :
|
setfacl -m u:epi:rwx /crypt/
va donner les droits rwx à l'utilisateur epi sur /cryptsetfacl -Rm u:epi:rwx /crypt/
va donner les droits rwx sur /crypt récursivement. setfacl -m d:u:epi:rw /crypt
va donner les droits lire et écrire dans les fichiers et
répertoires créés dans /crypt
à partir de maintenant.setfacl -R -m
d:u:user1:rwx,d:u:user2:rwx,d:u:user3:rwx /crypt
va donner les droits sur /crypt à user1, user2, user3.setfacl -b /crypt
supprime tous les acl sur /crypt. |
cp -a permet de copier des fichiers en conservant les acl si la copie se fait dans une partition montée avec l'option acl, et avec un système de fichiers gérant les acl.
|
:~$ cp -a
/crypt/astuces.txt /mnt/hdb6/perm_acl/
:~$ ls -ld /mnt/hdb6/perm_acl/astuces.txt -rwxrwx---+ 1 cep cep 144 2006-06-19 15:16 /mnt/hdb6/perm_acl/astuces.txt :~$ chacl -l /mnt/hdb6/perm_acl/astuces.txt /mnt/hdb6/perm_acl/astuces.txt [u::rwx,u:epi:rwx,g::rwx,m::rwx,o::---] |
De même mv conserve les acl. Ce n'est pas le cas de rsync.
Pour aller plus loin, voir aussi man acl, man getfacl, man setfacl, man chacl