Les droits sur un fichier/répertoire permettent de restreindre les accès à un fichier/répertoire, suivant un certain nombre de paramètres.
Les trois principaux droits sur des fichiers/répertoires sont:
Ces différents droits sont associées à trois types d'utilisateurs :
C'est une des bases de la sécurité informatique.
De nombreuses combinaisons sont possibles.
On peut ainsi permettre aux autres utilisateurs la lecture et l'exécution d'un fichier/répertoire, mais pas sa modification, etc.
Ce système a une limite, il ne permet pas de réglages fins.
Il est par exemple impossible de donner les mêmes droits pour partager des fichiers entre plusieurs utilisateurs ou groupes d'utilisateurs, tout en les gardant confidentiels face aux autres.
Pour pallier ces lacunes a été conçu le système des ACL.
un système permettant de faire une gestion plus fine des droits d'accès aux fichiers que ne le permet la méthode employée par les systèmes UNIX/LINUX.
Les ACL ne sont pas nativement activées sur Linux mais le noyau les prend en charge.
Pour savoir si le noyau Linux prend en charge les ACL :
grep ACL /boot/config-$(uname -r)
Voici, le résultat :
CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_REISERFS_FS_POSIX_ACL=y CONFIG_JFS_POSIX_ACL=y CONFIG_XFS_POSIX_ACL=y CONFIG_BTRFS_FS_POSIX_ACL=y CONFIG_FS_POSIX_ACL=y CONFIG_TMPFS_POSIX_ACL=y # CONFIG_HFSPLUS_FS_POSIX_ACL is not set CONFIG_JFFS2_FS_POSIX_ACL=y CONFIG_F2FS_FS_POSIX_ACL=y CONFIG_NFS_V3_ACL=y CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3_ACL=y CONFIG_NFS_ACL_SUPPORT=m CONFIG_CEPH_FS_POSIX_ACL=y CONFIG_CIFS_ACL=y CONFIG_9P_FS_POSIX_ACL=y
Elle doit retourner y
pour le type système de fichier qui vous intéresse.
Le package acl
doit être déjà installé, si non:
apt-get install acl
Pour activé sur une partition du système de fichier, modifier votre fichier fstab
comme cela :
vim /etc/fstab
/dev/mapper/VG0-racine / ext4 errors=remount-ro,acl 0 1 # /boot was on /dev/sda1 during installation UUID=57017155-d648-4379-b705-7375d85dfc61 /boot ext4 defaults 0 2 /dev/mapper/VG0-share /share ext4 defaults,acl,user_xattr,barrier=1 0 2 /dev/mapper/VG0-swap none swap sw 0 0
Puis remonter le système de fichier :
mount -o remount /
L'attribution des droits se fait grâce à la commande setfacl
, la lecture des droits avec getfacl
Ainsi les deux commandes suivantes sont équivalentes :
chmod u=rw fichier setfacl -m u::rw fichier
Un fichier dont les ACL auront été spécifiés verra s'ajouter un +
à la fin de la liste des droits
Voici, un exemple :
drwxrwx---+ 4 ksh ksh 4096 févr. 17 13:40 test drwxrwx---+ 2 ksh ksh 4096 févr. 23 08:05 test2 drwxrwx---+ 17 ksh ksh 4096 févr. 9 15:43 test3 drwxrwx--- 2 ksh ksh 12288 févr. 22 07:51 test4
getfacl permet d'afficher l'ensemble des permissions définies
Voici, un exemple
getfacl test/
# file: test/ # owner: ksh # group: ksh user::rwx user:toto:rwx group::--- mask::rwx other::--- default:user::rwx default:user:toto:rwx default:group::--- default:mask::rwx default:other::---
Ici on peut voir que le propriétaire du répertoire test
(ksh) a les droits rwx
et le login toto rwx
, les autres utilisateurs n'ont aucun droit.
getfacl -d … spécifie des acl par défaut, qui ne peuvent s'appliquer qu'aux répertoires. Voici, un exemple :
getfacl -d test/
# file: test/ # owner: ksh # group: ksh user::rwx user:toto:rwx group::--- mask::rwx other::---
Les permissions effectives sont affichées individuellement pour les users ou groups, Cela apparaît quand le masque est trop restrictif.
Voici, un exemple :
getfacl test/
# file: test/ # owner: ksh # group: ksh user::rwx user:toto:rwx #effective:r-x group::--- mask::r-x other::--- default:user::rwx default:user:toto:rwx #effective:r-x default:group::--- default:mask::r-x default:other::---
setfacl permet d'ajouter des permissions
Voici, exemple :
setfacl -m u:toto:rwx test/
Ici, on ajoute les permissions de lire, écrire et d’exécution sur le répertoire test
au login toto
.
On peut cumuler les login et groupe comme cela :
setfacl -m u:toto:rwx,u:titi:r-x,g:tata:r-x test/
On peut aussi le faire de façon récursive pour l'ensemble d'un répertoire :
setfacl -R -m u:toto:rwx,u:titi:r-x,g:tata:r-x test/
On peut définir les permissions par défaut :
setfacl -R -m u:toto:rwx,d:u:titi:rwx test/
Avec cette commande nous avons ajouté les permissions de lire, écrire et d’exécution sur le répertoire test
au login toto
et tous les répertoires/fichiers en dessous, mais aussi ajouté les même permission par défaut.
Définir le masque :
setfacl -m m::rwx test/
Définir les permissions pour le groupe :
setfacl -m g::rwx test/
Définir les permissions pour le propriétaire :
setfacl -m u::rwx test/
Définir les permission pour les autres login :
setfacl -m o::rwx test/
Définir les permissions par défaut :
setfacl -m d:u::rwx,g::rwx,o::rwx test/
d'ailleurs cette commande équivaut à cela
chmod 777 test/