SetGID auf Verzeichnissen
Ausgangslage
Alice möchte mit Bob zusammenarbeiten. Sie wollen in einem gemeinsamen Verzeichnis lesen und schreiben, insbesondere soll eine vom Alice erstellte Datei von Bob bearbeitet werden können (und umgekehrt).
Lösung
Alice (alice) und Bob (bob) erhalten beide die Gruppe projekt, welche zunächst erstellt werden muss:
root@debian:~# adduser --group projekt
root@debian:~# adduser alice projekt
root@debian:~# adduser bob projekt
Das gemeinsame Arbeitsverzeichnis projektdir wird in diesem Beispiel in /tmp/ liegen:
root@debian:~# mkdir /tmp/projektdir
Anschließend bekommt das Verzeichnis das SetGID-Flag, das Schreibrecht für die eigene Gruppe (damit können auch Dateien mit "fremdem" Besitzer gelöscht werden) und die Gruppe projekt selbst zugewiesen:
root@debian:~# chmod g+s /tmp/projektdir
root@debian:~# chmod 775 /tmp/projektdir
root@debian:~# chown :projekt /tmp/projektdir
Dies äußert sich am s in der Rechteübersicht des Verzeichnislistings:
root@debian:~# ls -ld /tmp/projektdir
drwxrwsr-x 2 root projekt 4096 18. Jul 17:42 projektdir
# * <- SetGID ist eingeschaltet
Eine von Alice angelegte Datei somefile gehört folgenden Benutzern und Gruppen:
user@debian:~$ whoami
alice
user@debian:~$ echo 'Dies ist sehr' > /tmp/projektdir/somefile
user@debian:~$ ls -l /tmp/projektdir/somefile
-rw-rw-r-- 1 alice projekt 14 18. Jul 17:45 somefile
Da Bob auch in der Gruppe projekt ist, kann er somefile ohne Probleme bearbeiten.
user@debian:~$ whoami
bob
user@debian:~$ echo 'produktiv.' >> /tmp/projektdir/somefile
user@debian:~$ cat /tmp/projektdir/somefile
Dies ist sehr
produktiv.
Zusammenfassung
Ein SetGID-Flag auf einem Verzeichnis sorgt dafür, dass eine darin anzulegende Datei dieselbe Gruppe wie das Verzeichnis selbst bekommt. Dies gilt natürlich auch für Unterverzeichnisse und analog für SetUID/Benutzer.
Mit Vorsicht ist die Verwendung von SetUID/SetGID bei ausführbaren Dateien zu genießen: Sie können dann mit den Rechten des Besitzers bzw. dessen Gruppe ausgeführt werden! Ein prominentes Beispiel ist das Programm passwd bei Verwendung der Shadow-Suite.