Fichiers/répertoires sécurisés à l'aide d'ACL (listes de contrôle d'accès) sous Linux
En tant qu'Administrateur système, notre première priorité sera de protéger et de sécuriser les données contre tout accès non autorisé. Nous connaissons tous les autorisations que nous définissons à l'aide de certaines commandes Linux utiles telles que chmod, chown, chgrp… etc. Cependant, ces autorisations par défaut les ensembles ont certaines limites et peuvent parfois ne pas fonctionner selon nos besoins. Par exemple, nous ne pouvons pas configurer différents ensembles d'autorisations pour différents utilisateurs sur le même répertoire ou fichier. Ainsi, des Listes de contrôle d'accès (ACL) ont été mises en place.
Disons que vous avez trois utilisateurs, « tecmint1 », « tecmint2 » et « tecmint3 ». Chacun ayant un groupe commun dit « acl ». L'utilisateur 'tecmint1' souhaite que seul l'utilisateur 'tecmint2' puisse lire et accéder aux fichiers appartenant à ' tecmint1' et personne d'autre ne devrait y avoir accès.
Les ACL (Access Control Lists) nous permettent de faire la même chose. Ces ACL nous permettent d'accorder des autorisations à un utilisateur, un groupe et à tout groupe d'utilisateurs qui ne figurent pas dans la liste de groupes d'un utilisateur.
Remarque : Conformément à la documentation du produit Redhat, il fournit une prise en charge ACL pour le système de fichiers ext3 et les systèmes de fichiers exportés NFS.
Comment vérifier la prise en charge ACL dans les systèmes Linux
Avant d'aller de l'avant, vous devez disposer de la prise en charge des ACL sur le noyau actuel et les systèmes de fichiers montés.
1. Vérifiez le noyau pour la prise en charge ACL
Exécutez la commande suivante pour vérifier la prise en charge ACL pour le système de fichiers et l'option POSIX_ACL=Y (s'il y a N au lieu de Y, cela signifie Kernel ne prend pas en charge l'ACL et doit être recompilé).
[root@linux ~]# grep -i acl /boot/config*
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_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y
2. Vérifiez les packages requis
Avant de commencer à jouer avec les ACL, assurez-vous que les packages requis sont installés. Vous trouverez ci-dessous les packages requis qui doivent être installés à l'aide de yum ou apt-get.
[root@linux ~]# yum install nfs4-acl-tools acl libacl [on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl [on Debian based systems]
3. Vérifiez le système de fichiers monté pour la prise en charge des ACL
Maintenant, vérifiez le système de fichiers monté s'il est monté avec l'option ACL ou non. Nous pouvons utiliser la commande 'mount' pour vérifier la même chose, comme indiqué ci-dessous.
[root@linux ~]# mount | grep -i root
/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)
Mais dans notre cas, l'acl n'est pas affiché par défaut. Nous avons donc ensuite la possibilité de remonter la partition montée à l'aide de l'option acl. Mais, avant d'aller de l'avant, nous avons une autre option pour nous assurer que la partition est montée ou non avec l'option acl, car pour les systèmes récents, elle peut être intégrée à l'option de montage par défaut.
[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl
Default mount options: user_xattr acl
Dans la sortie ci-dessus, vous pouvez voir que l'option de montage par défaut prend déjà en charge acl. Une autre option consiste à remonter la partition comme indiqué ci-dessous.
[root@linux ~]# mount -o remount,acl /
Ensuite, ajoutez l'entrée ci-dessous au fichier « /etc/fstab » pour la rendre permanente.
/dev/mapper/fedora-root / ext4 defaults,acl 1 1
Encore une fois, remontez la partition.
[root@linux ~]# mount -o remount /
4. Pour le serveur NFS
Sur le serveur NFS, si le système de fichiers exporté par le serveur NSF prend en charge les ACL et que les ACL peuvent être lues par les clients NFS, alors les ACL sont utilisées par le système client.
Pour désactiver les ACL sur le partage NFS, vous devez ajouter l'option « no_acl » dans le fichier « /etc/exportfs » sur le serveur NFS. Pour le désactiver à nouveau côté client NSF, utilisez l'option « no_acl » pendant le montage.
Comment implémenter la prise en charge ACL dans les systèmes Linux
Il existe deux types de ACL :
- ACL d'accès : les ACL d'accès sont utilisées pour accorder des autorisations sur n'importe quel fichier ou répertoire.
- ACL par défaut : les ACL par défaut sont utilisées pour accorder/définir une liste de contrôle d'accès sur un répertoire spécifique uniquement.
Différence entre l'ACL d'accès et l'ACL par défaut :
- L'ACL par défaut peut être utilisée uniquement au niveau du répertoire.
- Tout sous-répertoire ou fichier créé dans ce répertoire héritera des ACL de son répertoire parent. D'un autre côté, un fichier hérite des ACL par défaut en tant qu'ACL d'accès.
- Nous utilisons « –d » pour définir les ACL par défaut et les ACL par défaut sont facultatives.
Avant de définir les ACL par défaut
Pour déterminer les ACL par défaut pour un fichier ou un répertoire spécifique, utilisez la commande « getfacl ». Dans l'exemple ci-dessous, le getfacl est utilisé pour obtenir les ACL par défaut pour un dossier « Musique ».
[root@linux ~]# getfacl Music/
file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-
Après avoir défini les ACL par défaut
Pour définir les ACL par défaut pour un fichier ou un répertoire spécifique, utilisez la commande « setfacl ». Dans l'exemple ci-dessous, la commande setfacl définira une nouvelle ACL (lire et exécuter) sur un dossier 'Musique'.
[root@linux ~]# setfacl -m d:o:rx Music/
[root@linux ~]# getfacl Music/
file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x
Comment définir de nouvelles ACL
Utilisez la commande 'setfacl' pour définir ou modifier n'importe quel fichier ou répertoire. Par exemple, pour accorder des autorisations de lecture et écriture à l'utilisateur « tecmint1 ».
setfacl -m u:tecmint1:rw /tecmint1/example
Comment afficher les ACL
Utilisez la commande « getfacl » pour afficher l'ACL sur n'importe quel fichier ou répertoire. Par exemple, pour afficher l'ACL sur « /tecmint1/example », utilisez la commande ci-dessous.
getfacl /tecmint1/example
file: tecmint1/example/
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---
Comment supprimer les ACL
Pour supprimer l'ACL de n'importe quel fichier/répertoire, nous utilisons les options x et b comme indiqué ci-dessous.
setfacl -x ACL file/directory # remove only specified ACL from file/directory.
setfacl -b file/directory #removing all ACL from file/direcoty
Implémentons les ACL dans les scénarios suivants.
Deux utilisateurs (tecmint1 et tecmint2), tous deux ayant un groupe secondaire commun nommé « acl ». Nous allons créer un répertoire appartenant à 'tecmint1' et fournirons l'autorisation lire et exécuter sur ce répertoire à l'utilisateur 'tecmint2'.
Étape 1 : Créez deux utilisateurs et supprimez leur mot de passe.
[root@linux ~]# for user in tecmint1 tecmint2
> do
> useradd $user
> passwd -d $user
> done
Removing password for user tecmint1.
passwd: Success
Removing password for user tecmint2.
passwd: Success
Étape 2 : Créez un groupe et des utilisateurs dans un groupe secondaire.
[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2
Étape 3 : Créez un répertoire /tecmint et changez de propriétaire en tecmint1.
[root@linux ~]# mkdir /tecmint1
[root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/
drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1
getfacl: Removing leading '/' from absolute path names
file: tecmint1
owner: tecmint1
group: root
user::rwx
group::r-x
other::r-x
Étape 4 : Connectez-vous avec tecmint1 et créez un répertoire dans le dossier /tecmint.
[tecmint@linux ~]$ su - tecmint1
Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/
[tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll
total 4
drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami
tecmint1
Étape 5 : Définissez maintenant l'ACL en utilisant 'setfacl', de sorte que 'tecmint1' ait toutes les autorisations rwx, 'tecmint2' aura uniquement l'autorisation de lecture sur le dossier 'exemple' et les autres n'auront aucune autorisation.
setfacl -m u:tecmint1:rwx example/
setfacl -m u:tecmint2:r-- example/
setfacl -m other:--- example/
getfacl example/
file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::r-x
mask::rwx
other::---
Étape 6 : Connectez-vous maintenant avec un autre utilisateur, c'est-à-dire « tecmint2 » sur un autre terminal et changez de répertoire en « /tecmint1 ». Essayez maintenant d'afficher le contenu à l'aide de la commande 'ls', puis essayez de changer de répertoire et voyez la différence comme ci-dessous.
[tecmint@linux ~]$ su - tecmint2
Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ ls -lR example/
example/:
total 0
[tecmint2@linux tecmint1]$ cd example/
-bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/
file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---
Étape 7 : Donnez maintenant l'autorisation « exécuter » à « tecmint2 » sur le dossier « exemple », puis utilisez < commande'cd' pour voir l'effet. Désormais, « tecmint2 » a les autorisations pour afficher et modifier le répertoire, mais n'a pas les autorisations pour écrire quoi que ce soit.
[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/
[tecmint1@linux tecmint1]$ getfacl example/
file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r-x
group::rwx
mask::rwx
other::---
[tecmint@linux ~]$ su - tecmint2
Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ cd example/
[tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test
mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test
touch: cannot touch ‘test’: Permission denied
Remarque : Après avoir implémenté l'ACL, vous verrez un signe « + » supplémentaire pour la sortie « ls –l » comme ci-dessous.
[root@linux tecmint1]# ll
total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example
Liens de référence
Documentation d'ACL