Comment définir des listes de contrôle d’accès (ACL) et des quotas de disque pour les utilisateurs et les groupes

Listes de contrôle d’accès (également connues sous le nom de ACL) sont une fonctionnalité du noyau Linux qui permet de définir des droits d’accès plus fins pour les fichiers et répertoires que ceux spécifiés par les permissions régulières ugo/rwx.

Par exemple, les permissions standard ugo/rwx ne permettent pas de définir des permissions différentes pour différents utilisateurs individuels ou groupes. Avec les ACL, il est relativement facile de le faire, comme nous le verrons dans cet article.

Vérification de la compatibilité du système de fichiers avec les ACL

Pour vous assurer que vos systèmes de fichiers prennent actuellement en charge les ACL, vous devriez vérifier s’ils ont été montés en utilisant l’option acl. Pour ce faire, nous utiliserons tune2fs pour les systèmes de fichiers ext2/3/4 comme indiqué ci-dessous. Remplacez /dev/sda1 par le périphérique ou le système de fichiers que vous souhaitez vérifier:

# tune2fs -l /dev/sda1 | grep "Default mount options:"

Note: Avec XFS, les listes de contrôle d’accès sont prises en charge par défaut.

Dans le système de fichiers ext4 suivant, nous pouvons voir que les ACL ont été activées pour /dev/xvda2:

# tune2fs -l /dev/xvda2 | grep "Default mount options:"
Check ACL Enabled on Linux Filesystem

Si la commande ci-dessus n’indique pas que le système de fichiers a été monté avec le support des ACL, c’est probablement dû à l’option noacl présente dans /etc/fstab.

Dans ce cas, supprimez-la, démontez le système de fichiers, puis remontez-le, ou redémarrez simplement votre système après avoir enregistré les modifications dans /etc/fstab.

Introduction des ACL dans Linux

Pour illustrer le fonctionnement des ACL, nous utiliserons un groupe nommé développeurs et ajouterons les utilisateurs walterwhite et saulgoodman (oui, je suis fan de Breaking Bad !) à ce groupe.:

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

Avant de continuer, vérifions que les deux utilisateurs ont bien été ajoutés au groupe des développeurs:

# id walterwhite
# id saulgoodman
Find User ID in Linux

Créons maintenant un répertoire appelé test dans /mnt, et un fichier nommé acl.txt à l’intérieur (/mnt/test/acl.txt).

Ensuite, nous définirons le propriétaire du groupe sur développeurs et changerons ses autorisations par défaut ugo/rwx de manière récursive en 770 (accordant ainsi les autorisations de lecture, d’écriture et d’exécution au propriétaire et au propriétaire du groupe du fichier):

# mkdir /mnt/test
# touch /mnt/test/acl.txt
# chgrp -R developers /mnt/test
# chmod -R 770 /mnt/test

Comme prévu, vous pouvez écrire dans /mnt/test/acl.txt en tant que walterwhite ou saulgoodman:

# su - walterwhite
# echo "My name is Walter White" > /mnt/test/acl.txt
# exit
# su - saulgoodman
# echo "My name is Saul Goodman" >> /mnt/test/acl.txt
# exit
Verify ACL Rules on Users

Jusqu’ici tout va bien. Cependant, nous verrons bientôt un problème lorsque nous devrons accorder l’accès en écriture à /mnt/test/acl.txt à un autre utilisateur qui n’est pas dans le groupe des développeurs.

Les autorisations standard ugo/rwx nécessiteraient que le nouvel utilisateur soit ajouté au groupe des développeurs, mais cela lui donnerait les mêmes autorisations sur tous les objets appartenant au groupe. C’est précisément là que les ACL sont utiles.

Définition des ACL sous Linux

Il existe deux types d’ACL : les ACL d’accès (appliquées à un fichier ou un répertoire), et les ACL par défaut (optionnelles), qui ne peuvent être appliquées qu’à un répertoire.

Si des fichiers à l’intérieur d’un répertoire où un ACL par défaut a été défini n’ont pas leur propre ACL, ils héritent de l’ACL par défaut de leur répertoire parent.

Donnons à l’utilisateur gacanepa l’accès en lecture et en écriture à /mnt/test/acl.txt. Avant cela, examinons les paramètres ACL actuels dans ce répertoire avec :

# getfacl /mnt/test/acl.txt

Ensuite, modifiez les ACL sur le fichier, utilisez u: suivi du nom d’utilisateur et de :rw pour indiquer les autorisations de lecture/écriture :

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

Et exécutez getfacl sur le fichier à nouveau pour comparer. L’image suivante montre le « Avant » et « Après » :

# getfacl /mnt/test/acl.txt
Set ACL on Linux Users

Ensuite, nous devrons donner aux autres les autorisations d’exécution sur le répertoire /mnt/test :

# chmod +x /mnt/test

Gardez à l’esprit que pour accéder au contenu d’un répertoire, un utilisateur régulier a besoin d’autorisations d’exécution sur ce répertoire.

L’utilisateur gacanepa devrait maintenant pouvoir écrire dans le fichier. Passez à ce compte utilisateur et exécutez la commande suivante pour confirmer :

# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

Pour définir un ACL par défaut sur un répertoire (dont le contenu héritera sauf indication contraire), ajoutez d: avant la règle et spécifiez un répertoire au lieu d’un nom de fichier :

# setfacl -m d:o:r /mnt/test
# getfacl /mnt/test/

L’ACL ci-dessus permettra aux utilisateurs qui ne sont pas dans le groupe propriétaire d’avoir un accès en lecture aux futurs contenus du répertoire /mnt/test. Notez la différence dans la sortie de getfacl /mnt/test avant et après le changement :

Set Default ACL to Linux Directory

Pour supprimer un ACL spécifique, remplacez -m dans les commandes ci-dessus par -x. Par exemple,

# setfacl -x d:o /mnt/test

Alternativement, vous pouvez également utiliser l’option -b pour supprimer TOUS les ACL en une seule étape :

# setfacl -b /mnt/test

Pour plus d’informations et d’exemples sur l’utilisation des ACL, veuillez vous référer au chapitre 10, section 2, du Guide de sécurité openSUSE (également disponible en téléchargement gratuit au format PDF).

Définir les quotas de disque Linux sur les utilisateurs et les systèmes de fichiers

L’espace de stockage est une autre ressource qui doit être utilisée et surveillée avec soin. Pour ce faire, des quotas peuvent être définis sur une base de système de fichiers, soit pour des utilisateurs individuels, soit pour des groupes.

Ainsi, une limite est placée sur l’utilisation du disque autorisée pour un utilisateur donné ou un groupe spécifique, et vous pouvez être assuré que vos disques ne seront pas remplis à pleine capacité par un utilisateur négligent (ou mal intentionné).

La première chose à faire pour activer les quotas sur un système de fichiers est de le monter avec les options usrquota ou grpquota (pour les quotas utilisateur et de groupe, respectivement) dans /etc/fstab.

Par exemple, activons les quotas basés sur les utilisateurs sur /dev/vg00/vol_backups et les quotas basés sur les groupes sur /dev/vg00/vol_projects.

Notez que l’ UUID est utilisé pour identifier chaque système de fichiers.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

Démontez et remontez les deux systèmes de fichiers :

# umount /home/projects
# umount /home/backups
# mount -o remount /home/projects
# mount -o remount /home/backups 

Ensuite, vérifiez que les options usrquota et grpquota sont présentes dans la sortie de mount (voir ci-dessous) :

# mount | grep vg00
Check Linux User Quota and Group Quota

Enfin, exécutez les commandes suivantes pour initialiser et activer les quotas:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

Cela dit, attribuons maintenant des quotas au nom d’utilisateur et au groupe que nous avons mentionnés précédemment. Vous pouvez ensuite désactiver les quotas avec quotaoff.

Configuration des quotas de disque Linux

Commençons par définir une ACL sur /home/backups pour l’utilisateur gacanepa, ce qui lui donnera des autorisations de lecture, d’écriture et d’exécution sur ce répertoire:

# setfacl -m u:gacanepa:rwx /home/backups/

Ensuite, avec,

# edquota -u gacanepa

Nous fixerons la limite souple à 900 et la limite dure à 1000 blocs (1024 octets/bloc * 1000 blocs = 1024000 octets = 1 Mo) d’utilisation de l’espace disque.

Nous pouvons également fixer une limite de 20 et 25 en tant que limites souples et dures sur le nombre de fichiers que cet utilisateur peut créer.

La commande ci-dessus lancera l’éditeur de texte ($EDITOR) avec un fichier temporaire où nous pouvons définir les limites mentionnées précédemment:

Linux Disk Quota For User

Ces paramètres entraîneront l’affichage d’un avertissement à l’utilisateur gacanepa lorsqu’il aura atteint les limites de 900 blocs ou de 20 inodes pour une période de grâce par défaut de 7 jours.

Si la situation de dépassement de quota n’a pas été résolue d’ici là (par exemple, en supprimant des fichiers), la limite souple deviendra la limite dure et cet utilisateur sera empêché d’utiliser plus d’espace de stockage ou de créer plus de fichiers.

Pour tester, demandons à l’utilisateur gacanepa d’essayer de créer un fichier vide de 2 Mo nommé test1 à l’intérieur de /home/backups:

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1
Verify Linux User Quota on Disk

Comme vous pouvez le constater, l’opération d’écriture du fichier échoue en raison du dépassement du quota de disque. Étant donné que seuls les premiers 1000 Ko sont écrits sur le disque, le résultat dans ce cas sera très probablement un fichier corrompu.

De même, vous pouvez créer une ACL pour les groupes de développeurs afin de donner aux membres de ce groupe un accès rwx à /home/projects :

# setfacl -m g:developers:rwx /home/projects/

Et définir les limites de quota avec :

# edquota -g developers

Tout comme nous l’avons fait précédemment avec l’utilisateur gacanepa.

La période de grâce peut être spécifiée pour un nombre quelconque de secondes, minutes, heures, jours, semaines ou mois en exécutant.

# edquota -t

et en mettant à jour les valeurs sous Période de grâce de bloc et Période de grâce d’i-nœud.

Contrairement à l’utilisation de blocs ou d’i-nœuds (qui est définie sur une base utilisateur ou groupe), la période de grâce est définie au niveau du système.

Pour rapporter les quotas, vous pouvez utiliser quota -u [utilisateur] ou quota -g [groupe] pour une liste rapide ou repquota -v [/chemin/vers/le/système_de_fichiers] pour un rapport plus détaillé (verbeux) et bien formaté.

Bien sûr, vous voudrez remplacer [utilisateur], [groupe] et [/chemin/vers/le/système_de_fichiers] par des noms d’utilisateur / groupe spécifiques et le système de fichiers que vous souhaitez vérifier.

Résumé

Dans cet article, nous avons expliqué comment définir des Listes de Contrôle d’Accès et des quotas de disque pour les utilisateurs et les groupes. En utilisant les deux, vous pourrez gérer les autorisations et l’utilisation du disque de manière plus efficace.

Si vous voulez en savoir plus sur les quotas, vous pouvez consulter le Mini-guide des quotas dans le projet de documentation Linux.

Bien sûr, vous pouvez aussi compter sur nous pour répondre à vos questions. Il vous suffit de les soumettre en utilisant le formulaire de commentaire ci-dessous et nous serons ravis d’y jeter un coup d’œil.

Source:
https://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/