Recherche de site Web

Création et configuration de répertoires setgid pour la collaboration - RHCSA


Les permissions et les droits du système de fichiers GNU/Linux sont la base de la sécurité du système, et l’un de ses principes est la séparation claire des droits sur les fichiers et les dossiers. Dans un environnement fortement multi-utilisateurs, tel que le serveur d’une école, les droits de fichier empêchent par défaut un utilisateur de supprimer ou d’écraser accidentellement les documents d’un autre utilisateur. Cependant, il existe des cas d’utilisation où plusieurs utilisateurs doivent accéder (lire, écrire et même supprimer) aux fichiers d’autres utilisateurs - comme cela peut être le cas sur le serveur scolaire mentionné ci-dessus, où les élèves travaillent sur le même projet. Dans cette section de la préparation à l’examen RHCSA, nous allons apprendre à créer un environnement pour une telle collaboration, en utilisant la technique setgid (set groupID). Notez que bien que nous effectuions ces étapes sur un système d’exploitation récent, le setgid n’est pas quelque chose de nouveau, et vous le trouverez dans toutes les distributions.

Dans ce tutoriel, vous allez apprendre :

  • Comment ajouter des utilisateurs à un groupe supplémentaire
  • Comment utiliser set-GID sur un répertoire
  • Comment vérifier la propriété correcte dans le répertoire set-GID
  • Comment utiliser le répertoire spécial en tant que membre du groupe

Activation de la collaboration avec le répertoire setgid.

Configuration logicielle requise et conventions utilisées

Le cas d’utilisation

Pour démontrer l’utilisation du setgid, nous avons un serveur virtuel, et sur celui-ci, nous devons créer un groupe d’utilisateurs, ajouter des membres et configurer un répertoire auquel ils ont tous les deux accès. Jusqu’à présent, il ne s’agit que d’une question
de paramètres d’autorisation. L’astuce sera d’ajouter le setgid au répertoire, de sorte que les fichiers créés à l’intérieur du répertoire auront le groupe propriétaire du répertoire parent. Étant donné que le groupe dispose d’autorisations de lecture et d’écriture dans le répertoire, tous les membres du groupe peuvent lire et écrire les fichiers, sans que l’utilisateur d’origine ait besoin de définir explicitement l’appartenance au groupe.

Configuration de base

Tout d’abord, nous créons les objets nécessaires. Créons le répertoire du projet :

mkdir -p /student_projects/rocket_science

Et nos deux utilisateurs, sarah et john, en utilisant la commande useradd :

useradd john
useradd sarah

Nous devons également créer un groupe d’utilisateurs qui permettra la collaboration entre ses membres :

groupadd rocketengineers

Ensuite, nous définissons ce groupe comme propriétaire du répertoire du projet, de manière récursive :

chown -R :rocketengineers /student_projects/rocket_science

Ensuite, nous ajoutons nos utilisateurs au groupe rocketengineers :

usermod -a -G rocketengineers john
usermod -a -G rocketengineers sarah

Nous avons ajouté le groupe en tant que groupe secondaire. Pour plus d’informations sur les groupes, consultez le tutoriel sur l’appartenance aux groupes.

Pour terminer l’installation de base, nous devons ajouter une autorisation complète au groupe dans le répertoire :

chmod 770 /student_projects/rocket_science

Et avec cela, notre configuration de base est terminée. Les deux utilisateurs peuvent écrire dans le répertoire, et les fichiers créés seront la propriété de l’utilisateur, et le groupe propriétaire sera le groupe principal de l’utilisateur. Nous pouvons vérifier les permissions
que nous définissons avec stat :

stat /student_projects/rocket_science
  File: /student_projects/rocket_science
  Size: 6         	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 17789698    Links: 2
Access: (0770/drwxrwx---)  Uid: (    0/    root)   Gid: ( 1003/rocketengineers)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:29:57.500453785 +0200
Modify: 2020-10-04 18:29:47.650278956 +0200
Change: 2020-10-04 18:30:34.809115974 +0200
 Birth: -

Les identificateurs seront très probablement différents. Nous pouvons voir que le propriétaire du répertoire est root, tandis que la propriété du groupe appartient au groupe rocketengineers. Cela permet aux deux membres
du groupe de lire et d’écrire depuis et vers le répertoire.

Collaboration sans setgid

Supposons que les deux utilisateurs souhaitent partager quelques notes avec cette configuration. Sarah a reçu un fichier texte avec des données importantes dans son répertoire personnel :

id
uid=1002(sarah) gid=1002(sarah) groups=1002(sarah),1003(rocketengineers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
cat general_project.notes 
text

Pour le partager avec john, elle copie le fichier dans le répertoire partagé (il y a donc toujours une sauvegarde dans son répertoire personnel, juste au cas où) :

cp general_project.notes /student_projects/rocket_science/

En vérifiant les propriétés, nous pouvons voir que le propriétaire est bien sarah, et que le groupe propriétaire du fichier est également sarah, le groupe principal de l’utilisateur :

stat /student_projects/rocket_science/general_project.notes
  File: /student_projects/rocket_science/general_project.notes
  Size: 5         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 18019570    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1002/   sarah)   Gid: ( 1002/   sarah)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:31:30.229099624 +0200
Modify: 2020-10-04 18:31:30.229099624 +0200
Change: 2020-10-04 18:31:30.229099624 +0200
 Birth: -

Passons à john. Il a également quelques conclusions sur le projet et aimerait les partager.

id
uid=1001(john) gid=1001(john) groups=1001(john),1003(rocketengineers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
echo "mytext" > rocket.txt
cp rocket.txt /student_projects/rocket_science/

Les mêmes autorisations s’appliquent, le fichier nouvellement copié sera la propriété de john :

stat /student_projects/rocket_science/rocket.txt 
  File: /student_projects/rocket_science/rocket.txt
  Size: 7         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 18356857    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    john)   Gid: ( 1001/    john)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:32:24.433075710 +0200
Modify: 2020-10-04 18:32:24.433075710 +0200
Change: 2020-10-04 18:32:24.433075710 +0200
 Birth: -

Comme ils sont tous les deux membres du groupe rocketengineers, ils peuvent lire le contenu du répertoire, et comme leurs deux notes sont lisibles par tout le monde, ils peuvent tous les deux lire les fichiers /> de l’autre

cat /student_projects/rocket_science/general_project.notes 
text

Le problème se pose lorsque jean voudrait ajouter quelques notes sur le fichier de données important de sarah :

echo "some comments" >>  /student_projects/rocket_science/general_project.notes 
-bash: /student_projects/rocket_science/general_project.notes: Permission denied

En effet, ils ne peuvent pas travailler sur les fichiers de l’autre, seulement les lire. Maintenant, Sarah pourrait définir la propriété de groupe de son fichier sur leur groupe commun, résolvant ainsi le problème. Mais pourquoi aurait-elle besoin
cela avec chaque fichier, si nous avions le setgid pour nous aider ?

Définition de l’indicateur setgid

Pour définir l’indicateur setgid, nous utilisons chmod :

chmod g+s /student_projects/rocket_science

Notez l’indicateur « s » aux permissions de tâtonnement (défini en gras pour plus de clarté) :

stat /student_projects/rocket_science
  File: /student_projects/rocket_science
  Size: 53        	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 17789698    Links: 2
Access: (2770/drwxrws---)  Uid: (    0/    root)   Gid: ( 1003/rocketengineers)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:32:29.389167450 +0200
Modify: 2020-10-04 18:32:24.433075710 +0200
Change: 2020-10-04 18:34:04.449927062 +0200
 Birth: -

Test et vérification des résultats

Maintenant, Sarah peut partager ses nouvelles notes de recherche :

cat findings.txt 
rocket needs wings
cp findings.txt /student_projects/rocket_science/
stat /student_projects/rocket_science/findings.txt 
  File: /student_projects/rocket_science/findings.txt
  Size: 19        	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 18999000    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1002/   sarah)   Gid: ( 1003/rocketengineers)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:35:15.195236593 +0200
Modify: 2020-10-04 18:35:15.195236593 +0200
Change: 2020-10-04 18:35:15.195236593 +0200
 Birth: -

La propriété du groupe est définie sur le groupe du répertoire parent en raison du setgid en place. Cela amènera John à être en mesure de commenter les nouvelles notes de recherche :

echo "verified!" >> /student_projects/rocket_science/findings.txt
cat /student_projects/rocket_science/findings.txt 
rocket needs wings
verified!

Et avec cela, nous avons atteint notre objectif de mettre en place un répertoire de collaboration pour un groupe d’utilisateurs. Nous pourrions le faire pour d’autres groupes avec la méthode ci-dessus, en séparant les données des différents projets par les permissions
, afin qu’un membre d’un groupe ne puisse pas supprimer accidentellement les données d’un autre projet.

# Titre de la vidéo : Travailler dans un répertoire setgid
# Description de la vidéo : Modifier les fichiers d’un autre utilisateur dans un répertoire setgid
# Nom du fichier vidéo : rhcsa_setgid.webm

Travailler dans un répertoire setgid – Modifier les fichiers d’autres utilisateurs dans un répertoire setgid

Conclusion

Sous les permissions strictes et les droits de propriété de GNU/Linux, setgid est un moyen simple de permettre aux utilisateurs du système d’interagir avec les fichiers des autres de manière sécurisée, en permettant le travail de groupe
sans utiliser une solution externe lourde, ni gâcher les groupes et les permissions initiaux de l’utilisateur. Dans l’exemple ci-dessus, nous n’avons pas eu besoin de toucher aux répertoires personnels de l’utilisateur, ni à ses permissions /> à l<'échelle du système, nous avons simplement mis en place un endroit spécial où ils peuvent partager ce dont ils ont besoin.

Exercices

  1. Créez plusieurs répertoires de projets avec différents groupes. Vérifiez si les membres d’un projet peuvent lire les fichiers d’autres projets.
  2. Créez un répertoire inter-projets, auquel tous les membres du projet ont accès.
  3. Créez un répertoire inter-projets en lecture seule, dans lequel un seul membre du projet (gestion de projet) peut écrire, mais où les membres de tous les projets peuvent lire.

Articles connexes: