# Erstellen eines gemeinsamen Ordners
# an einem erreichbaren Ort bsp. /home
sudo mkdir developers
# Gruppe des Ordners anpassen
sudo chgrp developers developers/
# Rechte des Ordner anpassen
# Gruppe darf alles, Others nichts
sudo chmod 770 developers/
# setgid-Bit setzen ("set group id")
# neue Dateien innerhalb des Ordners gehören
# ab dann der Gruppe
sudo chmod g+s developers/
# sticky-Bit setzen
# Dateien können nur vom Besitzer einer Datei
# gelöscht werden
sudo chmod +t developers/
Problem 1: Alle Mitglieder der Gruppe sollen überhaupt erstmal den gemeinsamen Ordner betreten dürfen
In der Standardkonfiguration von Linux ist der Home-Ordner eines Benutzers nur für diesen Benutzer zugänglich. Wenn ein Ordner in einem Home-Verzeichnis liegt, können andere Gruppenmitglieder ihn nicht erreichen, solange ihnen der Zugriff auf den Home-Ordner selbst verweigert wird.
Hierarchie
Die Berechtigungen des Home-Ordners schränken den Zugriff auf darunterliegende Dateien und Verzeichnisse ein. Standardmäßig hat ein Home-Ordner Berechtigungen wie:
drwxr-x--- 2 benutzer benutzer 4096 Nov 23 12:00 /home/benutzer
rwx)r-x). Vorsicht: Nur Gruppe benutzer !---)Selbst wenn ein Unterordner wie /home/benutzer/projekt für eine Gruppe freigegeben ist, können Gruppenmitglieder ihn nicht erreichen, da ihnen der Zugriff auf /home/benutzer fehlt.
Annahme
Später kommen hinzu
Zuerst legen wir die beiden Benutzer alice und bob an und vergeben auch die Passwörter
sudo useradd -m -s /bin/bash alice
sudo useradd -m -s /bin/bash bob
sudo passwd alice
sudo passwd bob
Nun erstellen wir die gemeinsame Gruppe developers und fügen alice und bob dieser Gruppe hinzu
sudo groupadd developers
Benutzer zur gemeinsamen Gruppe hinzufügen
sudo usermod -aG developers alice
sudo usermod -aG developers bob
Homeordner von alice für alle freigeben
chmod 755 /home/alice
Eine richtig doofe Idee! Don't do this. Zwar kommen wir jetzt auf den Home-Ordner von alice. Allerding gilt das nun auch für jeden.
Gemeinsame Gruppe - Ordner im Homeordner von alice erstellen und Gruppe ändern
chmod 770 /home/alice/developers
Erstelle ein Verzeichnis, auf das beide Benutzer zugreifen können
Erstelle ein Verzeichnis, auf das beide Benutzer zugreifen können, z.B. developers im Home-Verzeichnis:
Wer muss das machen? --> sudo
sudo mkdir /home/developers
developers das Verzeichnis verwaltet:sudo chown :developers /home/developers
alternativ:
sudo chgrp developers /home/developers
sudo chmod 770 /home/developers
Das bedeutet:
developers können lesen, schreiben und ausführen.Stelle sicher, dass die Berechtigungen korrekt gesetzt sind:
ls -l /home
Du solltest eine Ausgabe wie diese sehen:
drwxrwx--- 2 root developers 4096 Dez 9 12:34 developers
Melde dich nun als Benutzer alice an und erstelle eine Datei im Verzeichnis developers:
su - alice
touch /home/developers/testdatei.txt
Melde dich dann als Benutzer bob an und prüfe, ob du auf die Datei zugreifen kannst:
su - bob
cat /home/developers/testdatei.txt
Da beide Benutzer in der Gruppe developers sind, sollten sie in der Lage sein, auf die Datei zuzugreifen.
Verschiebe gemeinsame Ordner an einen neutralen Ort, der nicht an persönliche Home-Verzeichnisse gebunden ist.
Gute Orte sind home oder /srv.
Problem: Standardgruppe neuer Dateien festzurren
setgid-Bit auf einem Verzeichnis gesetzt wird, erhalten alle neuen Dateien und Unterverzeichnisse innerhalb dieses Verzeichnisses automatisch die Gruppe des Verzeichnisses, nicht die primäre Gruppe des Benutzers, der sie erstellt.setgid-Bit auf einer Datei gesetzt ist, wird diese Datei mit den Gruppenrechten des Besitzers ausgeführt, anstatt mit den Gruppenrechten des Benutzers, der die Datei ausführt.Beispiel für ein Verzeichnis:
chmod g+s /home/developers
Wenn Benutzer alice eine Datei im Ordner erstellt, wird diese Datei der Gruppe des Ordners zugewiesen.
Beispiel für eine Datei:
chmod g+s /pfad/zur/ausfuehrbaren_datei
Wenn diese Datei ausgeführt wird, übernimmt der Prozess die Gruppenrechte der Datei.
Prüfe das Setzen des setgid-Bits
Nach ls ersetzt ein s das x in den Datei-Berechtigungen.
drwxrws--- 2 alice developers 4096 Nov 23 12:00 shared-folder
Problem 3: Nur Besitzer soll Datei löschen und umbenennen dürfen
Das Sticky Bit hat eine andere Funktion und wird hauptsächlich in Verzeichnissen verwendet, um zu verhindern, dass Benutzer Dateien in einem Verzeichnis löschen oder umbenennen, die nicht ihnen gehören.
/tmp verwendet, um zu verhindern, dass Benutzer Dateien von anderen Benutzern löschen.Beispiel für das Setzen des Sticky Bits auf ein Verzeichnis:
chmod +t /tmp
Verhalten: Alle Benutzer können Dateien in /tmp erstellen, aber nur der Besitzer oder der Root-Benutzer kann die Dateien wieder löschen oder umbenennen.
Prüfe die Berechtigungen:
ls -ld /tmp/mysharedfolder
// Ausgabe
drwxrwxrwt 2 root root 4096 Nov 23 12:00 /tmp/mysharedfolder
Das t am Ende der Berechtigungen zeigt an, dass das Sticky Bit gesetzt ist.
| Merkmal | setgid-Bit |
Sticky Bit |
|---|---|---|
| Hauptfunktion | Erbt die Gruppe des Verzeichnisses für neue Dateien | Verhindert das Löschen/Umbenennen von Dateien durch andere Benutzer |
| Verzeichniswirkung | Neue Dateien erben die Gruppe des Verzeichnisses | Nur der Besitzer der Datei (oder root) kann sie löschen oder umbenennen |
| Dateiwirkung | Ändert die Gruppenrechte bei der Ausführung | Keine Wirkung auf Dateien |
| Häufige Verwendung | Gemeinsame Ordner für eine Gruppe | Temporäre Verzeichnisse wie /tmp |