Recherche de site Web

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 :

  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 peut être utilisée uniquement 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. D'un autre côté, un fichier hérite des ACL par défaut en tant qu'ACL d'accès.
  3. 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