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_scienceEt nos deux utilisateurs, sarah et john, en utilisant la commande useradd :
useradd john
useradd sarahNous devons également créer un groupe d’utilisateurs qui permettra la collaboration entre ses membres :
groupadd rocketengineersEnsuite, nous définissons ce groupe comme propriétaire du répertoire du projet, de manière récursive :
chown -R :rocketengineers /student_projects/rocket_scienceEnsuite, nous ajoutons nos utilisateurs au groupe rocketengineers :
usermod -a -G rocketengineers john
usermod -a -G rocketengineers sarahNous 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_scienceEt 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
textPour 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 Le problème se pose lorsque En effet, ils ne peuvent pas travailler sur les fichiers de l’autre, seulement les lire. Maintenant, Pour définir l’indicateur setgid, nous utilisons Notez l’indicateur « s » aux permissions de tâtonnement (défini en gras pour plus de clarté) : Maintenant, La propriété du groupe est définie sur le groupe du répertoire parent en raison du 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 # Titre de la vidéo : Travailler dans un répertoire setgid Travailler dans un répertoire setgid – Modifier les fichiers d’autres utilisateurs dans un répertoire setgid Sous les permissions strictes et les droits de propriété de GNU/Linux, 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’autrecat /student_projects/rocket_science/general_project.notes
textjean 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 deniedSarah 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
chmod :chmod g+s /student_projects/rocket_sciencestat /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
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: -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!
, afin qu’un membre d’un groupe ne puisse pas supprimer accidentellement les données d’un autre projet.
# Description de la vidéo : Modifier les fichiers d’un autre utilisateur dans un répertoire setgid
# Nom du fichier vidéo : rhcsa_setgid.webmConclusion
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
