Co to jest Sticky Bit, SUID i SGID?

Jeśli jesteś administratorem serwera lub tylko jego użytkownikiem mogłeś się spotkać z takim określeniem jak „Sticky Bit”. Wiekszość użytkowników systemu Linux nie wie lub nie rozumie do czego służy to określenie i jakie ma ono znaczenie w Linux-ie.

„Sticky Bit” to dodatkowe 3 binarne bity które są umieszczone przed standardowymi 3 bitami w cechach lub trybie pliku. Ta cyfra ósemkowa lub te 3 bity są używane do określania specjalnych typów uprawnień do danego pliku lub katalogu.

Jeśli w cyfrze ósemkowej pierwszy bit jest ustawiony na 1 (binarnie bity są ustawione na 001) to „Sticky Bit” dotyczy katalogu. Pliki umieszczone w takim katalogu mogą być tylko skasowane przez właściciela pliku lub przez wszystkich którzy mają prawa zapisu do tego katalogu.

Prawa nadane do katalogu /tmp są bardzo dobrym przykładem jak jest używany „sticky bit”.

drwxr-xr-x 1 root root 12 Mar 5 2015 srv
drwxr-xr-x 12 root root 0 Oct 18 12:43 sys
drwxrwxrwt 1 root root 2316 Mar 29 12:46 tmp
drwxr-xr-x 1 root root 130 Mar 5 2015 usr
drwxr-xr-x 1 root root 130 Mar 5 2015 var

Jeśli bit ten jest ustawiony to oznacza się go literką „T”, jeśli nie to  „t” (małe „t”). Zobacz tabelkę poniżej.

User Group Others
r w x r w x r w t

r w T

0 0 1 1 1 1 1 1 1 1 1 1

1 1 0

1 7 7 7

6

Innym przykładem wykorzystania tych 3 bitów do ustalenia specjalnych praw jest „Set Group ID (SGID)” oraz „Set User ID (SUID)”.

Set Group ID (SGID)

W tym wypadku ustawiany jest drugi bit cyfry ósemkowej (binarnie 010).

W przypadku plików, gdy uruchomiony jest program jego identyfikator grupy jest taki sam jak identyfikator grupy pliku z którego proces został uruchomiony. Każdy plik utworzony w katalogu z ustawionym SGID będzie miał ustawioną przynależność do grupy katalogu w którym się znajduje, a nie grupy do której należał użytkownik tworzący plik. Domyślnie przynależność do grupy nowych plików jest zawsze ustawiony na główna grupę użytkownika tworzącego nowy plik.

Dla plików wykonywalnych, pliki tworzone przez ten program mają przynależność do grupy do której plik wykonywalny należał.

Dla katalogów pliki stworzone w tym katalogu przynależą do grupy do której katalog jest przypisany, a nie głównej grupy do której przynależy użytkownik. Nowe katalogi stworzone w tym katalogu, dziedziczą identyfikator grupy z katalogu nadrzędnego.

User Group Others
r w x r w s

r w S

r w x
0 1 0 1 1 1 1 1 1

1 1 0

1 1 1
2 7 7

6

7

Set User ID (SUID)

Jeśli SUID jest ustawiony to ósemkowa cyfra przyjmuje wartość 4 co oznacza binarnie 100.

Dla plików oznacza to, że proces będzie miał prawa użytkownika który jest właścicielem pliku wykonywalnego, a nie użytkownika ten plik uruchamiającego.

Trzeba być bardzo uważnym ustawiając ten bit i nie nadawać praw administratora (root-a) przez przypadek. jest wiele programów które wymagają aby ten bit był ustawiony jeśli chcemy go uruchomić w oczekiwanym przez nas rezultacie. Przykładem takim jest „passwd” lub „ping”.

Ustawienie tego bitu na katalogu nie ma żadnego znaczenia, jest ignorowany.

User Group Others
r w s

r w S

r w x r w x
1 0 0 1 1 1

1 1 0

1 1 1 1 1 1
4 7

6

7 7

Na koniec komendy jak zmienić lub ustawić te specjalne bity. Do tego słuzy nam komenda chmod.

chmod o+s <nazwa pliku>

chmod g+s <nazwa katalogu>

chmod u+s <nazwa pliku>

Ustawienia te testowałem w systemie OpenSUSE oraz SLES11 i 12, chodź powinny też działać w systemach Ubuntu oraz RedHat.