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— zobaczyszdrwxrwxrwtchmod +t /shared— włączasz sticky bit na własnym kataloguchmod 1777 /shared— to samo plus pełnerwxdla wszystkichchmod -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.