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
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 textUm 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 auchsarah
, 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 textDas Problem tritt auf, wenn
john
möchte einige Anmerkungen zusarah
hinzufügen ‘s wichtige Datendatei:$ echo "einige Kommentare">> /student_projects/rocket_science/general_project.notes -bash:/student_projects/rocket_science/general_project.notes:Erlaubnis verweigertTatsä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_scienceBeachten 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 wirdjohn
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.webmArbeiten 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
- Erstellen Sie mehrere Projektverzeichnisse mit unterschiedlichen Gruppen. Überprüfen Sie, ob die Mitglieder eines Projekts die Dateien anderer Projekte lesen können.
- Erstellen Sie ein projektübergreifendes Verzeichnis, auf das alle Projektmitglieder Zugriff haben.
- Erstellen Sie ein projektübergreifendes schreibgeschütztes Verzeichnis, in dem nur ein Projektmitglied (Projektmanagement) schreiben, aber Mitglieder aller Projekte lesen können.