setgid

Bit uprawnień wpływający na grupę: dla plików uruchamia program z prawami grupy właściciela, dla katalogów wymusza dziedziczenie grupy przez nowe pliki.

setgid (Set Group ID) to specjalny bit uprawnień w systemach uniksowych, który zmienia zachowanie pliku lub katalogu względem grupy. Na pliku wykonywalnym sprawia, że program startuje z prawami grupy właściciela pliku, a nie grupy użytkownika, który go uruchomił. Na katalogu wymusza, by każdy nowy plik i podkatalog dziedziczył grupę katalogu, zamiast brać grupę domyślną osoby tworzącej.

Jak to działa

Zwykle proces dziedziczy grupę po użytkowniku, który go odpalił. Bit setgid na pliku wykonywalnym podmienia tzw. effective GID procesu na grupę właściciela pliku. To kuzyn setuid, tylko że dotyczy grupy, nie użytkownika. W zapisie ósemkowym setgid to 2000 (setuid to 4000, sticky bit to 1000), a symbolicznie ustawisz go przez chmod g+s.

Dużo ciekawszy i częściej używany jest setgid na katalogu. Bez niego nowy plik dostaje grupę główną twórcy. Z setgid każdy plik powstający w katalogu automatycznie przejmuje grupę katalogu, a nowe podkatalogi dziedziczą również sam bit setgid. Dzięki temu cała struktura zachowuje spójną grupę bez ręcznego chown.

Przykład z praktyki

Klasyk: współdzielony katalog dla zespołu. Chcesz, żeby wszystko, co ktokolwiek tam wrzuci, należało do grupy devs:

  • chgrp devs /srv/projekt
  • chmod 2775 /srv/projekt (lub chmod g+s /srv/projekt)

Po tym ls -ld /srv/projekt pokaże drwxrwsr-x — to s w miejscu uprawnień grupy zdradza setgid. Teraz każdy plik utworzony w środku dostaje grupę devs, więc reszta zespołu może go czytać i edytować bez awantur o uprawnienia.

Na co uważać

Jeśli zobaczysz wielkie S zamiast małego s (np. drwxrwSr-x), to znaczy, że setgid jest ustawiony, ale brakuje bitu wykonywania dla grupy — zwykle błąd, nie funkcja. Pamiętaj też, że setgid działa od momentu ustawienia: pliki, które były w katalogu wcześniej, nie zmienią grupy same z siebie. I rzecz najważniejsza — setgid na plikach wykonywalnych to potencjalna dziura w bezpieczeństwie, dlatego audytorzy regularnie skanują system poleceniem find / -perm -2000 w poszukiwaniu podejrzanych binarek.

Pojęcia powiązane

setuid, sticky bit, chmod, chown, uprawnienia ósemkowe, effective UID/GID, umask, ls -l.