Sticky bit

Bit uprawnień ustawiany na katalogu, który pozwala usuwać pliki tylko ich właścicielom. Stosowany m.in. na /tmp, gdzie wszyscy mogą pisać.

Sticky bit to specjalny bit uprawnień, który ustawiasz na katalogu, żeby ograniczyć kasowanie plików: w katalogu z włączonym sticky bitem plik może usunąć lub zmienić mu nazwę tylko jego właściciel, właściciel katalogu albo root — nawet jeśli wszyscy inni mają tam prawo zapisu. To czyni z niego klasyczne zabezpieczenie dla katalogów współdzielonych, gdzie każdy może wrzucać swoje pliki, ale nikt nie powinien grzebać w cudzych.

Bez sticky bitu prawo zapisu do katalogu (w) oznacza prawo do usuwania dowolnego pliku w środku, niezależnie od tego, kto jest jego właścicielem. W Uniksie usuwanie pliku to tak naprawdę operacja na katalogu (zdejmujesz dowiązanie z listy), więc liczą się uprawnienia do katalogu, a nie do samego pliku. Sticky bit dorzuca tu dodatkowy warunek: liczy się jeszcze, czy to twój plik.

W zapisie ósemkowym sticky bit ma wartość 1000, więc typowe uprawnienia katalogu publicznego to 1777. W wyniku ls -l rozpoznasz go po literze t na końcu: drwxrwxrwt. Duże T oznacza, że sticky bit jest ustawiony, ale brakuje prawa wykonania (x) dla „pozostałych”.

Przykład z praktyki

Najsłynniejszy przypadek to katalog /tmp. Wszyscy użytkownicy systemu mogą tam tworzyć pliki, ale dzięki sticky bitowi nie skasują sobie nawzajem roboty. Sprawdzisz to tak:

  • ls -ld /tmp — zobaczysz drwxrwxrwt
  • chmod +t /shared — włączasz sticky bit na własnym katalogu
  • chmod 1777 /shared — to samo plus pełne rwx dla wszystkich
  • chmod -t /shared — wyłączasz sticky bit

Praktyczny scenariusz: tworzysz katalog na wymianę plików dla zespołu albo upload dla aplikacji webowej. Dajesz 1777, każdy wrzuca swoje, ale Krzysiek z sąsiedniego teamu nie skasuje plików, które wgrał ktoś inny.

Częste błędy i mity

Pierwszy mit: sticky bit chroni przed odczytem albo modyfikacją zawartości cudzego pliku. Nie chroni — działa wyłącznie na usuwanie i zmianę nazwy w obrębie katalogu. Treść pliku nadal pilnują jego własne uprawnienia.

Drugi: sticky bit na zwykłym pliku coś robi. Kiedyś, w starych Uniksach, na pliku wykonywalnym trzymał program w pamięci wymiany dla szybszego startu. Dziś Linux to ignoruje — sticky bit ma sens tylko na katalogu.

Trzeci: root nie podlega tej regule. Administrator i tak skasuje każdy plik. Sticky bit to ochrona między zwykłymi użytkownikami, nie przed superużytkownikiem.

Pojęcia powiązane

Warto znać resztę „specjalnych” bitów: setuid i setgid (uruchamianie z uprawnieniami właściciela albo grupy pliku, na katalogu setgid dziedziczy grupę). Do tego podstawy: chmod, zapis ósemkowy uprawnień, model rwx oraz umask ustawiający domyślne uprawnienia nowych plików.