Recherche de site Web

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


Les listes de contrôle d'accès (également appelées ACL) sont une fonctionnalité du noyau Linux qui permet de définir des droits d'accès plus précis pour les fichiers et les répertoires que ceux spécifiés par les autorisations ugo/rwx classiques.

Par exemple, les autorisations standard ugo/rwx ne permettent pas de définir des autorisations différentes pour différents utilisateurs ou groupes individuels. Avec les ACL, cela est relativement facile à 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 devez vérifier qu'ils ont été montés à l'aide de 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:"

Remarque : Avec XFS, les listes de contrôle d'accès sont prises en charge dès le départ.

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:"

Si la commande ci-dessus n'indique pas que le système de fichiers a été monté avec la prise en charge des ACL, cela est probablement dû à la présence de l'option noacl dans /etc/fstab.

Dans ce cas, supprimez-le, 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.

Présentation des ACL sous Linux

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

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 été ajoutés au groupe des développeurs :

id walterwhite
id saulgoodman

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 modifierons ses autorisations par défaut ugo/rwx de manière récursive en 770 (accordant ainsi la lecture, l'écriture et l'exécution). autorisations accordées à la fois au propriétaire et au groupe propriétaire 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

Jusqu'ici, tout va bien. Cependant, nous verrons bientôt un problème lorsque nous devrons accorder un accès en écriture à /mnt/test/acl.txt à un autre utilisateur qui ne fait pas partie du groupe des développeurs.

Les autorisations ugo/rwx standard 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 (qui sont appliquées à un fichier ou à un répertoire) et les ACL par défaut (facultatives), qui ne peuvent être appliquées qu'à un répertoire. .

Si les fichiers d'un répertoire dans lequel une ACL par défaut a été définie ne possèdent pas leur propre ACL, ils héritent de l'ACL par défaut de leur répertoire parent.

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

getfacl /mnt/test/acl.txt

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

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

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

getfacl /mnt/test/acl.txt

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 doit avoir des autorisations d'exécution sur ce répertoire.

L'utilisateur gacanepa devrait maintenant pouvoir écrire dans le fichier. Basculez vers 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 une ACL par défaut sur un répertoire (dont son contenu héritera sauf écrasement 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 ne faisant pas partie du groupe propriétaire d'avoir un accès en lecture au contenu futur du répertoire /mnt/test. Notez la différence dans le résultat de getfacl /mnt/test avant et après le changement :

Pour supprimer une 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 TOUTES les ACL en une seule étape :

setfacl -b /mnt/test

Pour plus d'informations et des 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 la base d'un 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 que vous devez faire pour activer les quotas sur un système de fichiers est de le monter avec les options usrquota ou grpquota (pour les quotas d'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 

Vérifiez ensuite que les options usrquota et grpquota sont présentes dans la sortie de mount (voir mis en évidence ci-dessous) :

mount | grep vg00

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 mentionnés plus tôt. Vous pourrez ensuite désactiver les quotas avec quotaoff.

Définition 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/

Puis avec,

edquota -u gacanepa

Nous allons créer les blocs souples limit=900 et durs limit=1000 (1024 octets/bloc * 1000 blocs=1024000 octets=1 Mo ) de l'utilisation de l'espace disque.

Nous pouvons également imposer une limite de 20 et 25 comme limites souples et strictes 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ù l'on pourra définir les limites mentionnées précédemment :

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

Si la situation de dépassement de quota n'a pas été éliminée d'ici là (par exemple, en supprimant des fichiers), la limite souple deviendra la limite stricte et cet utilisateur ne pourra pas utiliser plus d'espace de stockage ni créer davantage. des dossiers.

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

dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
ls -lh /home/backups/test1

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 1 000 premiers 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éfinissez les limites de quota avec :

edquota -g developers

Tout comme nous l'avons fait avec l'utilisateur gacanepa plus tôt.

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

edquota -t

et mettre à jour les valeurs sous Période de grâce du bloc et Période de grâce de l'inode.

Contrairement à l'utilisation de blocs ou d'inodes (qui sont définis par utilisateur ou par groupe), la période de grâce est définie à l'échelle du système.

Pour signaler les quotas, vous pouvez utiliser quota -u [user] ou quota -g [group] pour une liste rapide ou repquota -v [/path/to /filesystem] pour un rapport plus détaillé (verbeux) et bien formaté.

Bien sûr, vous souhaiterez remplacer [user], [group] et [/path/to/filesystem] par un utilisateur spécifique/les noms de groupe 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 plus efficacement les autorisations et l’utilisation du disque.

Si vous souhaitez en savoir plus sur les quotas, vous pouvez vous référer au mini-howto sur les quotas dans le projet de documentation Linux.

Il va sans dire que vous pouvez également compter sur nous pour répondre à vos questions. Soumettez-les simplement en utilisant le formulaire de commentaires ci-dessous et nous serons plus qu’heureux d’y jeter un œil.