# Gemeinsame Ordner ## Zugriff auf den Ordner **Problem 1: Alle Mitglieder der Gruppe sollen überhaupt erstmal den gemeinsamen Ordner betreten dürfen** * Unter Linux kannst du einen Ordner nicht betreten, wenn ein übergeordneter Ordner im Pfad die erforderlichen Berechtigungen verweigert, selbst wenn du die Berechtigungen für den Zielordner selbst hast * Linux verwendet eine **hierarchische** Sicherheitsstruktur, bei der alle übergeordneten Verzeichnisse den Zugriff auf die tieferen Verzeichnisse ermöglichen müssen * Wenn ein übergeordneter Ordner dir den Zugriff verweigert, blockiert dies automatisch den Zugang zu den darunterliegenden Ordnern, selbst wenn du an letzterem Berechtigungen hast. 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: ```bash drwx------ 2 benutzer benutzer 4096 Nov 23 12:00 /home/benutzer ``` - **Besitzer (benutzer)**: Vollzugriff (`rwx`). - **Gruppe und Andere**: Kein Zugriff (`---`). 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. --- ## Lösung: Erstellen eines gemeinsamen Ordner **Annahme** - Benutzer 1: **alice** - Benutzer 2: **bob** **Später kommen hinzu** - Gemeinsame Gruppe: **projektgruppe** - Gemeinsames Verzeichnis: **/home/alicebob** ## Schritt-für-Schritt Anleitung: ### Benutzer anlegen Zuerst legen wir die beiden Benutzer `alice` und `bob` an und vergeben auch die Passwörter ```bash sudo useradd -m -s /bin/bash alice sudo useradd -m -s /bin/bash bob sudo passwd alice sudo passwd bob ``` --- ### Gemeinsame Gruppe erstellen Nun erstellen wir die gemeinsame Gruppe `projektgruppe` und fügen `alice` und `bob` dieser Gruppe hinzu ```bash sudo groupadd projektgruppe ``` Benutzer zur gemeinsamen Gruppe hinzufügen ```bash sudo usermod -aG projektgruppe alice sudo usermod -aG projektgruppe bob ``` ### Erstmal falsch **Falsch #1**: Homeordner von alice für alle freigeben ```bash 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. **Falsch #2**: Gemeinsame Gruppe - Ordner im Homeordner von alice erstellen und Gruppe ändern ```bash chmod 770 /home/alice/alicebob ``` - Pfad kann nicht beschritten werden - Pfad muss vollumfänglich begehbar sein ### Jetzt aber richtig #### Gemeinsames Verzeichnis erstellen Erstelle ein Verzeichnis, auf das beide Benutzer zugreifen können, z.B. `alicebob` im Home-Verzeichnis: Wer muss das machen? `sudo` ```bash sudo mkdir /home/alicebob ``` andere gute Orte `/srv` und `/srv/alicebob` --- #### Besitzrechte des Verzeichnisses ändern Ändere den Besitzer des Verzeichnisses so, dass die Gruppe `projektgruppe` das Verzeichnis verwaltet: ```bash sudo chown :projektgruppe /home/alicebob ``` Setze die Berechtigungen so, dass Mitglieder der Gruppe lesen, schreiben und ausführen können: ```bash sudo chmod 770 /home/alicebob ``` Das bedeutet: - Der Besitzer (root) hat vollen Zugriff. - Die Mitglieder der Gruppe `projektgruppe` können lesen, schreiben und ausführen. - Andere Benutzer haben keinen Zugriff. --- #### Überprüfen der Berechtigungen Stelle sicher, dass die Berechtigungen korrekt gesetzt sind: ```bash ls -l /home ``` Du solltest eine Ausgabe wie diese sehen: ```bash drwxrwx--- 2 root projektgruppe 4096 Dez 9 12:34 alicebob ``` --- #### Testen des Zugriffs Melde dich nun als Benutzer `alice` an und erstelle eine Datei im Verzeichnis `alicebob`: ```bash su - alice touch /home/alicebob/testdatei.txt ``` Melde dich dann als Benutzer `bob` an und prüfe, ob du auf die Datei zugreifen kannst: ```bash su - bob cat /home/alicebob/testdatei.txt ``` Da beide Benutzer in der Gruppe `projektgruppe` sind, sollten sie in der Lage sein, auf die Datei zuzugreifen. --- #### Empfehlung Verschiebe gemeinsame Ordner an einen neutralen Ort, der nicht an persönliche Home-Verzeichnisse gebunden ist. --- ### setgid-Bit (Set Group ID) **Problem: Standardgruppe neuer Dateien festzurren** - **Ohne setgid-Bit**: Neue Dateien gehören der Primärgruppe des Erstellers - **Wirkung auf Verzeichnisse**: Wenn das `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. - **Wirkung auf ausführbare Dateien**: Wenn das `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:** ```bash chmod g+s /home/alicebob ``` Wenn Benutzer `alice` eine Datei im Ordner erstellt, wird diese Datei der Gruppe des Ordners zugewiesen. **Beispiel für eine Datei:** ```bash 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. ```bash drwxrws--- 2 alice projektgruppe 4096 Nov 23 12:00 shared-folder ``` --- ### Sticky-Bit **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. #### Verzeichnis mit Sticky Bit - **Wirkung auf Verzeichnisse**: Das Sticky Bit stellt sicher, dass nur der **Besitzer** der Datei (oder der Root-Benutzer) Dateien in einem Verzeichnis löschen oder umbenennen kann. Dies wird häufig in Verzeichnissen wie `/tmp` verwendet, um zu verhindern, dass Benutzer Dateien von anderen Benutzern löschen. **Beispiel für das Setzen des Sticky Bits auf ein Verzeichnis:** ```bash 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:** ```bash 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. --- ### Unterschiede zwischen setgid und Sticky Bit | 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`