GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Setgid-Verzeichnisse für die Zusammenarbeit erstellen und konfigurieren – RHCSA Objective Preparation

GNU/Linux-Dateisystemberechtigungen und -rechte sind die Grundlage der Systemsicherheit, und eines ihrer Prinzipien ist die klare Trennung von Rechten auf Dateien und Ordner. In einer Umgebung mit vielen Benutzern, wie z. B. dem Server einer Schule, verhindern Dateirechte standardmäßig, dass ein Benutzer versehentlich die Dokumente eines anderen löscht oder überschreibt. Es gibt jedoch Anwendungsfälle, in denen mehrere Benutzer auf die Dateien anderer Benutzer zugreifen (lesen, schreiben und sogar löschen) müssen – dies kann beim oben genannten Schulserver der Fall sein, wo Schüler am selben Projekt arbeiten. In diesem Abschnitt der RHCSA-Prüfungsvorbereitung werden wir lernen, wie man eine Umgebung für eine solche Zusammenarbeit schafft, indem man die setgid-Technik (set groupID) verwendet. Beachten Sie, dass, obwohl wir diese Schritte auf einem neueren Betriebssystem ausführen, die setgid nichts Neues ist und Sie sie in allen Distributionen finden werden.

In diesem Tutorial lernen Sie:

  • So fügen Sie Benutzer einer zusätzlichen Gruppe hinzu
  • Wie set-GID in einem Verzeichnis verwendet wird
  • So überprüfen Sie die ordnungsgemäße Eigentümerschaft innerhalb des set-GID-Verzeichnisses
  • So verwenden Sie das spezielle Verzeichnis als Mitglied der Gruppe

Aktivieren der Zusammenarbeit mit dem setgid-Verzeichnis.

Softwareanforderungen und verwendete Konventionen

Softwareanforderungen und Linux-Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder verwendete Softwareversion
System Red Hat Enterprise Linux 8
Software GNU Coreutils 8.30
Andere Privilegierter Zugriff auf Ihr Linux-System als root oder über sudo Befehl.
Konventionen # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl
$ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden

Der Anwendungsfall

Um die Verwendung von setgid zu demonstrieren, haben wir einen virtuellen Server, und darauf müssen wir eine Gruppe von Benutzern erstellen, Mitglieder hinzufügen und ein Verzeichnis einrichten, auf das beide Zugriff haben. Bisher ist dies nur eine Frage der Berechtigungseinstellungen. Der Trick besteht darin, die setgid zum Verzeichnis hinzuzufügen, sodass die im Verzeichnis erstellten Dateien die Eigentümergruppe des übergeordneten Verzeichnisses haben. Da die Gruppe Lese- und Schreibberechtigungen innerhalb des Verzeichnisses haben wird, können alle Mitglieder der Gruppe die Dateien lesen und schreiben, ohne dass der ursprüngliche Benutzer die Gruppenmitgliedschaft explizit festlegen muss.

Grundlegende Einrichtung

Zuerst erstellen wir die benötigten Objekte. Lassen Sie uns das Projektverzeichnis erstellen:

# mkdir -p /student_projects/rocket_science

Und unsere zwei Benutzer, sarah und john , mit dem useradd-Befehl:

# useradd john# useradd sarah

Wir müssen auch eine Benutzergruppe erstellen, die die Zusammenarbeit zwischen ihren Mitgliedern ermöglicht:

# groupadd Raketeningenieure

Als nächstes setzen wir diese Gruppe rekursiv als Besitzer des Projektverzeichnisses:

# chown -R :rocketengineers /student_projects/rocket_science

Als Nächstes fügen wir unsere Benutzer den rocketengineers hinzu Gruppe:

# usermod -a -G Raketeningenieure John# usermod -a -G Raketeningenieure Sarah

Wir haben die Gruppe als sekundäre Gruppe hinzugefügt. Einzelheiten zu Gruppen finden Sie im Gruppenmitgliedschafts-Tutorial.

Um die grundlegende Einrichtung abzuschließen, müssen wir der Gruppe die volle Berechtigung für das Verzeichnis hinzufügen:

# chmod 770 /student_projects/rocket_science

Und damit ist unsere Grundeinstellung abgeschlossen. Beide Benutzer können in das Verzeichnis schreiben, und erstellte Dateien gehören dem Benutzer, und die Eigentümergruppe ist die primäre Gruppe des Benutzers. Wir können die von uns gesetzten
Berechtigungen mit stat überprüfen :

# stat /student_projects/rocket_science File:/student_projects/rocket_science Size:6 Blocks:0 IO Block:4096 directoryDevice:fd00h/64768d Inode:17789698 Links:2Access:(0770/drwxrwx---) Uid:( 0/ root) Gid:(1003/rocketengineers)Kontext: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 Geburt:-

Identifikatoren werden sich höchstwahrscheinlich unterscheiden. Wir können sehen, dass der Eigentümer des Verzeichnisses root ist , während der Gruppenbesitz den rocketengineers gehört Gruppe. Dadurch können beide Mitglieder
der Gruppe von und in das Verzeichnis lesen und schreiben.

Zusammenarbeit ohne setgid

Nehmen wir an, die beiden Benutzer möchten einige Notizen zu diesem Setup teilen. sarah hat eine Textdatei mit wichtigen Daten in ihrem Home-Verzeichnis:

$ 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 

Um es mit john zu teilen , kopiert sie die Datei in das gemeinsam genutzte Verzeichnis (damit für alle Fälle noch ein Backup in ihrem Home-Verzeichnis vorhanden ist):

$ cp general_project.notes /student_projects/rocket_science/

Indem wir die Eigentümer überprüfen, können wir sehen, dass der Eigentümer tatsächlich sarah ist , und die Gruppe, der die Datei gehört, ist auch sarah , die primäre Gruppe des Benutzers:

$ stat /student_projects/rocket_science/general_project.notes File:/student_projects/rocket_science/general_project.notes Size:5 Blocks:8 IO Block:4096 regular fileDevice:fd00h/64768d Inode:18019570 Links:1Access:(0664/- rw-rw-r--) Uid:( 1002/ sarah) Gid:( 1002/ sarah) Kontext:unconfined_u:object_r:default_t:s0Access:2020-10-04 18:31:30.229099624 +0200Modify:2020-10-04 18:31:30.229099624 +0200Änderung:2020-10-04 18:31:30.229099624 +0200 Geburt:-

Wechseln wir zu john . Er hat auch einige Erkenntnisse über das Projekt und möchte sie teilen.

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

Es gelten dieselben Berechtigungen, die neu kopierte Datei gehört john :

$ stat /student_projects/rocket_science/rocket.txt File:/student_projects/rocket_science/rocket.txt Size:7 Blocks:8 IO Block:4096 regular fileDevice:fd00h/64768d Inode:18356857 Links:1Access:(0664/- rw-rw-r--) Uid:( 1001/ john) Gid:( 1001/ john) Kontext:unconfined_u:object_r:default_t:s0Access:2020-10-04 18:32:24.433075710 +0200Modify:2020-10-04 18:32:24.433075710 +0200Änderung:2020-10-04 18:32:24.433075710 +0200 Geburt:-

Da beide Mitglieder der rocketengineers sind Gruppe, können sie den Inhalt des Verzeichnisses lesen, und da ihre Notizen weltweit lesbar sind, können sie beide die
Dateien des anderen lesen.

$ cat /student_projects/rocket_science/general_project.notes text

Das Problem tritt auf, wenn john möchte einige Anmerkungen zu sarah hinzufügen ‘s wichtige Datendatei:

$ echo "einige Kommentare">> /student_projects/rocket_science/general_project.notes -bash:/student_projects/rocket_science/general_project.notes:Erlaubnis verweigert

Tatsächlich können sie nicht an den Dateien des anderen arbeiten, sondern sie nur lesen. Jetzt sarah könnte den Gruppenbesitz ihrer Datei auf ihre gemeinsame Gruppe festlegen und so das Problem lösen. Aber warum sollte sie
das bei jeder Datei brauchen, wenn wir die setgid haben, um uns zu helfen?

Das setgid-Flag setzen

Um das setgid-Flag zu setzen, verwenden wir chmod :

# chmod g+s /student_projects/rocket_science

Beachten Sie das „s“-Flag bei den Gruppenberechtigungen (der Übersichtlichkeit halber fett gesetzt):

# stat /student_projects/rocket_science File:/student_projects/rocket_science Size:53 Blocks:0 IO Block:4096 directoryDevice:fd00h/64768d Inode:17789698 Links:2Access:(2770/drwxrws ---) Uid:( 0/ root) Gid:( 1003/rocketengineers) Kontext:unconfined_u:object_r:default_t:s0Access:2020-10-04 18:32:29.389167450 +0200Modify:2020-10-04 18:32:24.433075710 +0200Änderung:2020-10-04 18:34:04.449927062 +0200 Geburt:-

Testen und Überprüfen der Ergebnisse

Jetzt sarah kann ihre neuen Forschungsnotizen teilen:

$ Katze Ergebnisse.txt Rakete braucht Flügel$ cp Ergebnisse.txt /student_projects/rocket_science/$ stat /student_projects/rocket_science/findings.txt Datei:/student_projects/rocket_science/findings.txt Größe:19 Blöcke:8 IO-Block:4096 reguläre Datei Gerät:fd00h/64768d Inode:18999000 Links:1 Zugriff:(0664/-rw-rw-r--) Uid:( 1002/ sarah) Gid:( 1003/rocketengineers )Kontext:unconfined_u:object_r:default_t:s0Zugriff:2020-10-04 18:35:15.195236593 +0200Ändern:2020-10-04 18:35:15.195236593 +0200Änderung:2020-10-04 18:35:16.503 +03 :-

Der Gruppenbesitz wird aufgrund von setgid auf die Gruppe des übergeordneten Verzeichnisses festgelegt an Ort und Stelle. Das wird john verursachen um die neuen Forschungsnotizen kommentieren zu können:

$ echo "verifiziert!">> /student_projects/rocket_science/findings.txt$ Katze /student_projects/rocket_science/findings.txt Rakete braucht Flügelverifizierung!

Und damit haben wir unser Ziel erreicht, ein Kollaborationsverzeichnis für eine Gruppe von Benutzern einzurichten. Wir könnten dies für andere Gruppen mit der obigen Methode tun, indem wir die Daten verschiedener Projekte nach
Berechtigungen trennen, damit ein Mitglied einer Gruppe nicht versehentlich Daten eines anderen Projekts löschen kann.

# Videotitel:Arbeiten in einem Setgid-Verzeichnis
# Videobeschreibung:Bearbeiten der Dateien anderer Benutzer in einem Setgid-Verzeichnis
# Videodateiname:rhcsa_setgid.webm

Arbeiten in einem Setgid-Verzeichnis – Bearbeiten der Dateien anderer Benutzer in einem Setgid-Verzeichnis

Schlussfolgerung

Unter GNU/Linux strenge Berechtigungen und Eigentumsrechte, setgid ist eine einfache Möglichkeit, Benutzern des Systems zu ermöglichen, auf sichere Weise mit den Dateien der anderen zu interagieren, Gruppenarbeit zu ermöglichen
ohne die Verwendung einer schweren externen Lösung oder die anfänglichen Gruppen und Berechtigungen des Benutzers durcheinander zu bringen. Im obigen Beispiel mussten wir die Home-Verzeichnisse der Benutzer oder ihre systemweiten
Berechtigungen nicht antasten, wir haben einfach einen speziellen Ort eingerichtet, an dem sie teilen können, was sie brauchen.

Übungen

  1. Erstellen Sie mehrere Projektverzeichnisse mit unterschiedlichen Gruppen. Überprüfen Sie, ob die Mitglieder eines Projekts die Dateien anderer Projekte lesen können.
  2. Erstellen Sie ein projektübergreifendes Verzeichnis, auf das alle Projektmitglieder Zugriff haben.
  3. Erstellen Sie ein projektübergreifendes schreibgeschütztes Verzeichnis, in dem nur ein Projektmitglied (Projektmanagement) schreiben, aber Mitglieder aller Projekte lesen können.

Linux
  1. Erstellen, Löschen und Verwalten von Verzeichnissen unter Linux

  2. So erstellen und löschen Sie Benutzergruppen in Linux

  3. 5 Beispiele zum Erstellen mehrerer Verzeichnisse in Linux

  4. Hardlink(s) für Verzeichnisse erzwingen?

  5. Erstellen Sie eine Datei als ein anderer Benutzer und eine andere Gruppe?

Konfigurieren Sie Systeme so, dass Dateisysteme beim Booten mit einer universell eindeutigen ID (UUID) oder einem Label gemountet werden – RHCSA Objective Preparation

Studienziele für die RHCSA-Prüfung und den Vorbereitungsleitfaden

Fügen Sie neue Partitionen und logische Volumes hinzu und wechseln Sie zerstörungsfrei zu einem System – RHCSA Objective Preparation

So erstellen Sie Verzeichnisse unter Linux (mkdir-Befehl)

Erstellen Sie ein Home-Verzeichnis für einen bestehenden Benutzer in Linux

Erstellen und konfigurieren Sie einen Benutzer in MSSQL