GNU/Linux >> Tutoriels Linux >  >> Linux

Créer et configurer des répertoires setgid pour la collaboration – Préparation des objectifs RHCSA

Les autorisations 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, comme le serveur d'une école, les droits sur les fichiers empêchent par défaut un utilisateur de supprimer ou d'écraser accidentellement les documents d'un autre. 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 dans le serveur scolaire mentionné ci-dessus, où les étudiants travaillent sur le même projet. Dans cette section de préparation à l'examen RHCSA, nous apprendrons comment créer un environnement pour une telle collaboration, en utilisant la technique setgid (set groupID). Notez que même si nous effectuons ces étapes sur un système d'exploitation récent, le setgid n'est pas nouveau et vous le trouverez dans toutes les distributions.

Dans ce didacticiel, vous apprendrez :

  • Comment ajouter des utilisateurs à un groupe supplémentaire
  • Comment utiliser set-GID sur un répertoire
  • Comment vérifier la propriété 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

Configuration logicielle requise et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version du logiciel utilisée
Système Red Hat Enterprise Linux 8
Logiciel GNU Coreutils 8.30
Autre Accès privilégié à votre système Linux en tant que root ou via le sudo commande.
Conventions # - nécessite que les commandes linux données soient exécutées avec les privilèges root soit directement en tant qu'utilisateur root, soit en utilisant sudo commande
$ – nécessite que les commandes linux données soient exécutées en tant qu'utilisateur normal non privilégié

Le cas d'utilisation

Pour démontrer l'utilisation de setgid, nous avons un serveur virtuel sur lequel nous devons créer un groupe d'utilisateurs, ajouter des membres et configurer un répertoire auquel ils ont tous deux accès. Jusqu'à présent, ce n'est qu'une
question de paramètres d'autorisation. L'astuce consistera à 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 aura des autorisations de lecture et d'écriture dans le répertoire, tous les membres du groupe peuvent lire et écrire les fichiers, sans avoir explicitement besoin de l'appartenance au groupe de paramètres utilisateur d'origine.

Configuration de base

Nous créons d'abord 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 aux rocketengineers groupe :

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

Nous avons ajouté le groupe comme groupe secondaire. Pour plus de détails sur les groupes, consultez le didacticiel sur l'appartenance à un groupe.

Pour terminer la configuration de base, nous devons ajouter une autorisation complète au groupe sur 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 appartiendront à l'utilisateur, et le groupe propriétaire sera le groupe principal de l'utilisateur. Nous pouvons vérifier les
autorisations que nous avons définies avec stat :

# stat /student_projects/rocket_science Fichier :/student_projects/rocket_science Taille :6 Blocs :0 Bloc IO :4096 DirectoryDevice :fd00h/64768d Inode :17789698 Liens :2Access :(0770/drwxrwx---) Uid :( 0/ root) Gid :(1003/rocketengineers)Context :unconfined_u:object_r:default_t:s0Access :2020-10-04 18:29:57.500453785 +0200Modify :2020-10-04 18:29:47.650278956 +0200Change :2020-10-04 18:30:34.809115974 +0200 Naissance :-

Les identifiants 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 aux rocketengineers grouper. Cela permet aux deux membres
du groupe de lire et d'écrire depuis et vers le répertoire.

Collaboration sans setgid

Disons que les deux utilisateurs aimeraient partager quelques notes avec cette configuration. sarah a obtenu un fichier texte avec des données importantes dans son répertoire personnel :

$ iduid=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 reste donc une sauvegarde dans son répertoire personnel, 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 le groupe propriétaire du fichier est également sarah , le groupe principal de l'utilisateur :

$ stat /student_projects/rocket_science/general_project.notes Fichier :/student_projects/rocket_science/general_project.notes Taille :5 blocs :8 IO Block :4096 regular fileDevice :fd00h/64768d Inode :18019570 Liens :1Access :(0664/- rw-rw-r--) Uid :( 1002/ sarah) Gid :( 1002/ sarah)Context :unconfined_u:object_r:default_t:s0Access :2020-10-04 18:31:30.229099624 +0200Modify :2020-10-04 18:31:30.229099624 +0200Modifier :2020-10-04 18:31:30.229099624 +0200 Naissance :-

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

$ iduid=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é appartiendra à john :

$ stat /student_projects/rocket_science/rocket.txt Fichier :/student_projects/rocket_science/rocket.txt Taille :7 blocs :8 IO Block :4096 regular fileDevice :fd00h/64768d Inode :18356857 Liens :1Access :(0664/- rw-rw-r--) Uid :( 1001/ john) Gid :( 1001/ john)Context :unconfined_u:object_r:default_t:s0Access :2020-10-04 18:32:24.433075710 +0200Modify :2020-10-04 18:32:24.433075710 +0200Modifier :2020-10-04 18:32:24.433075710 +0200 Naissance :-

Comme ils sont tous les deux membres des rocketengineers groupe, ils peuvent lire le contenu du répertoire, et puisque leurs deux notes sont lisibles par tout le monde, ils peuvent tous deux lire les fichiers
de l'autre.

$ cat /student_projects/rocket_science/general_project.notes text

Le problème survient lorsque john voudrais ajouter quelques notes sur sarah fichier de données important :

$ echo "quelques commentaires">> /student_projects/rocket_science/general_project.notes -bash :/student_projects/rocket_science/general_project.notes :autorisation refusée

En effet, ils ne peuvent pas travailler sur les fichiers des autres, 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
de cela avec chaque fichier, si nous avons le setgid pour nous aider ?

Définition de l'indicateur setgid

Pour définir le drapeau setgid, nous utilisons chmod :

# chmod g+s /student_projects/rocket_science

Remarquez le drapeau "s" au niveau des autorisations de groupe (défini en gras pour plus de clarté) :

# stat /student_projects/rocket_science Fichier :/student_projects/rocket_science Taille :53 Blocs :0 Bloc IO :4096 DirectoryDevice :fd00h/64768d Inode :17789698 Liens :2Access :(2770/drwxrws ---) Uid :( 0/ root) Gid :( 1003/rocketengineers)Context :unconfined_u:object_r:default_t:s0Access :2020-10-04 18:32:29.389167450 +0200Modify :2020-10-04 18:32 :24.433075710 +0200Modifier :2020-10-04 18:34:04.449927062 +0200 Naissance :-

Tester et vérifier les résultats

Maintenant sarah peut partager ses nouvelles notes de recherche :

$ cat founds.txt la fusée a besoin d'ailes$ cp founds.txt /student_projects/rocket_science/$ stat /student_projects/rocket_science/findings.txt Fichier :/student_projects/rocket_science/findings.txt Taille :19 blocs :8 blocs IO :4096 fichier standardDevice :fd00h/64768d Inode :18999000 Liens :1Access :(0664/-rw-rw-r--) Uid :( 1002/ sarah) Gid :( 1003/rocketengineers )Context :unconfined_u:object_r:default_t:s0Access :2020-10-04 18:35:15.195236593 +0200Modify :2020-10-04 18:35:15.195236593 +0200Change :2020-10-04 18:35:15.1935203650 :-

La propriété du groupe est définie sur le groupe du répertoire parent en raison du setgid en place. Cela causera john pour pouvoir commenter les nouvelles notes de recherche :

$ echo "vérifié !">> /student_projects/rocket_science/findings.txt$ cat /student_projects/rocket_science/findings.txt la fusée a besoin d'ailes vérifiées !

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 de différents projets par
autorisations, 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'autres utilisateurs 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 autorisations 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, permettant un travail de groupe
sans l'utilisation d'une solution externe lourde ou sans perturber les groupes et les autorisations initiaux de l'utilisateur. Dans l'exemple ci-dessus, nous n'avons pas eu besoin de toucher aux répertoires d'accueil des utilisateurs ni à leurs
autorisations à l'échelle du système, nous avons simplement configuré un emplacement spécial où ils peuvent partager ce dont ils ont besoin.

Exercices

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

Linux
  1. Créer, supprimer et gérer des répertoires sous Linux

  2. Comment créer et supprimer un groupe d'utilisateurs sous Linux

  3. Création forcée de lien(s) physique(s) de répertoire ?

  4. Créer un fichier zip et ignorer la structure du répertoire

  5. Comment forcer le groupe et les autorisations pour les fichiers créés dans un répertoire spécifique ?

Configurer des systèmes pour monter des systèmes de fichiers au démarrage par ID universel unique (UUID) ou étiquette – RHCSA Objectif Préparation

Objectifs d'étude pour l'examen RHCSA et le guide de préparation

Ajouter de nouvelles partitions, des volumes logiques et permuter vers un système de manière non destructive - Préparation de l'objectif RHCSA

Comment créer des répertoires sous Linux (commande mkdir)

Créer un répertoire personnel pour un utilisateur existant sous Linux

Créer et configurer un utilisateur dans MSSQL