Sécuriser les fichiers/répertoires en utilisant les listes de contrôle d’accès (ACL) sous Linux

En tant que Administrateur système, notre première priorité sera de protéger et sécuriser les données contre l’accès non autorisé. Nous sommes tous conscients des permissions que nous définissons à l’aide de certaines commandes Linux utiles comme chmod, chown, chgrp… etc. Cependant, ces ensembles de permissions par défaut présentent certaines limitations et ne fonctionnent parfois pas comme nous le souhaitons. Par exemple, nous ne pouvons pas établir des ensembles de permissions différents pour différents utilisateurs sur le même répertoire ou fichier. Par conséquent, les listes de contrôle d’accès (ACL) ont été mises en œuvre.

Linux Access Control Lists

Disons que vous avez trois utilisateurs, ‘tecmint1‘, ‘tecmint2‘ et ‘tecmint3‘. Chacun appartenant au même groupe, disons ‘acl‘. L’utilisateur ‘tecmint1‘ souhaite que seul l’utilisateur ‘tecmint2‘ puisse lire et accéder aux fichiers appartenant à ‘tecmint1‘ et que personne d’autre n’ait d’accès à ceux-ci.

ACLs (listes de contrôle d’accès) nous permettent de faire la même astuce. Ces ACL nous permettent d’accorder des permissions à un utilisateur, groupe et à n’importe quel groupe d’utilisateurs qui ne sont pas dans la liste de groupes d’un utilisateur.

Note: Selon la documentation de produit Redhat, elle fournit un support ACL pour le système de fichiers ext3 et les systèmes de fichiers exportés NFS.

Comment vérifier le support ACL dans les systèmes Linux

Avant de passer à l’avant, vous devriez avoir un support pour les ACLs sur le noyau actuel et les systèmes de fichiers montés.

1. Vérifier le noyau pour le support ACL

Exécutez la commande suivante pour vérifier la prise en charge de ACL pour le système de fichier et l’option POSIX_ACL=Y (s’il y a un N au lieu de Y, cela signifie que le noyau ne prend pas en charge les 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 à travailler avec les ACL, assurez-vous d’avoir les packages requis installés. Voici 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 la Prise en Charge d’ACL pour le Système de Fichiers Monté

Désormais, vérifiez si le système de fichiers monté est monté avec l’option d’ACL ou non. Nous pouvons utiliser la commande ‘mount‘ pour vérifier cela 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, il ne montre pas acl par défaut. Donc, nous avons ensuite l’option de remonter la partition montée à nouveau en utilisant l’option acl. Mais, avant de continuer, nous avons une autre option pour nous assurer que la partition est bien montée avec l’option acl ou non, car pour un système récent, cela peut être intégré à 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 est de 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 NFS prend en charge les ACL et que les ACL peuvent être lus par les clients NFS, alors les ACL sont utilisées par le système client.

Pour désactiver les ACL sur un partage NFS, vous devez ajouter l’option « no_acl » dans le fichier ‘/etc/exportfs‘ sur le serveur NFS. Pour le désactiver côté client NSF, utilisez à nouveau l’option « no_acl » lors du montage.

Comment implémenter la prise en charge des ACL dans les systèmes Linux

Il existe deux types de ACL:

  1. ACL d’accès: Les ACL d’accès sont utilisées pour accorder des autorisations sur n’importe quel fichier ou répertoire.
  2. 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:

  1. L’ACL par défaut ne peut être utilisée qu’au niveau du répertoire.
  2. Tout sous-répertoire ou fichier créé dans ce répertoire héritera des ACL de son répertoire parent. En revanche, un fichier hérite des ACL par défaut en tant que ses ACL d’accès.
  3. Nous utilisons « –d » pour définir des 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 répertoire spécifique, utilisez la commande ‘getfacl‘. Dans l’exemple ci-dessous, la commande getfacl est utilisée pour obtenir les ACL par défaut d’un dossier ‘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::rw-
Après avoir défini les ACL par défaut

Pour définir les ACL par défaut pour un fichier ou répertoire spécifique, utilisez la commande ‘setfacl‘. Dans l’exemple ci-dessous, la commande setfacl définira de nouvelles ACL (lecture et exécution) sur un dossier ‘Music‘.

[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 nouveaux ACLs

Utilisez la commande ‘setfacl’ pour définir ou modifier des ACL sur n’importe quel fichier ou répertoire. Par exemple, pour donner les permissions de lecture et écriture à l’utilisateur ‘tecmint1‘.

# setfacl -m u:tecmint1:rw /tecmint1/example

Comment afficher les ACLs

Utilisez la commande ‘getfacl‘ pour afficher les ACL sur n’importe quel fichier ou répertoire. Par exemple, pour afficher les 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 ACLs

Pour supprimer les ACL d’un fichier/dossier, on utilise 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 des ACLs dans les scénarios suivants.

Deux utilisateurs (tecmint1 et tecmint2), ayant tous les deux un groupe secondaire commun nommé ‘acl‘. Nous allons créer un répertoire appartenant à ‘tecmint1‘ et fournir les permissions de lecture et exécution sur ce répertoire à l’utilisateur ‘tecmint2‘.

Étape 1: Créer deux utilisateurs et supprimer le mot de passe des deux

[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éer un groupe et ajouter des utilisateurs au groupe secondaire.

[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2

Étape 3: Créer un répertoire /tecmint et changer la propriété 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: Se connecter avec tecmint1 et créer 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 les ACL en utilisant ‘setfacl‘, de sorte que ‘tecmint1’ ait toutes les permissions rwx, ‘tecmint2’ n’ait que la permission de lecture sur le dossier ‘exemple’ et les autres n’aient aucune permission.

$ 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 vers ‘/tecmint1’. Essayez maintenant de voir le contenu en utilisant la commande ‘ls’ et ensuite essayez de changer de répertoire pour voir la différence comme indiqué 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: Accordez maintenant la permission ‘exécuter’ à ‘tecmint2’ sur le dossier ‘exemple’ et utilisez ensuite la commande ‘cd’ pour voir l’effet. Maintenant, ‘tecmint2’ a les permissions pour voir et changer de répertoire, mais n’a pas la permission d’é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

Note: Après avoir implémenté les ACL, vous verrez un signe + supplémentaire dans la sortie ‘ls -l’ comme indiqué ci-dessous.

[root@linux tecmint1]# ll

total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example

Liens de référence

Documentation sur les ACL

Source:
https://www.tecmint.com/secure-files-using-acls-in-linux/