Retour

Gérer les permissions sur les fichiers avec les ACL



ACL = Access Control List


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 /crypt

setfacl -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


Retour


Valid HTML 4.01 Transitional        Valid CSS!