SetGID auf Verzeichnissen

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
WikiSicherheit ‹ 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.