Uprawnienia do plików i katalogów w systemie Linux – czym jest sticky bit?

Większość początkuących (ale nie tylko) użytkowników systemu Linux uważa, że uprawnienia do plików i katalogów na systemie Linux sprowadzają się tylko do

rwx rwx rwx

czyli uprawnień do odczytu, zapisu oraz wykonania dla właściciela, grupy oraz reszty. Tak nie jest. W skład uprawnień wchodzi jeszcze kilka bitów specjalnych. Jednym z nich jest sticky bit. Aby zrozumieć, czym on jest, musimy najpierw przypomnić sobie szczegóły dotyczące uprawnień do folderów.

Czym jest odczyt, zapis i wykonanie dla pliku wiedzą wszyscy. W przypadku folderów nie jest to jednak takie oczywiste. Odczyt dla folderu to odczytanie jego zawartości, czyli odczyt listy plików i folderów, które znajdują się tylko bezpośrednio w jego wnętrzu – bez wchodzenia w podfoldery. Zapis dla folderu oznacza uprawnienie do modyfikacji jego wnętrza – tworzenia nowych elementów wewnątrz oraz ich usuwania. Zostało nam jeszcze jedno uprawnienie do omówienia, które wprowadza najwięcej zamieszania. Wykonanie dla folderu oznacza uprawnienie do wejścia do jego środka. Żeby zrobić cokolwiek z plikiem wewnątrz katalogu (nawet gdy mamy pełne prawa do tego pliku) musim wejść do tego folderu, a więc potrzebujemy praw na jego wykonanie. Żeby wejść do podfolderu (nawet gdy mamy do niego pełne prawa) musimy przejść przez folder nadrzędny – więc i tu potrzebujemy praw na jego wykonanie. Reasumując, jeżeli mamy uprawnienia do odczytu folderu, a nie mamy praw do jego wykonania, to możemy wyświetlić zawartość tego folderu, ale nie możemy zrobić nic z niczym co w tym flderze jest – niezależnie od naszy praw do tej zawartości.

Przypomnienie mamy już za sobą. Teraz skupmy się na prawie zapisu do folderu. Jak zostało napisane powyżej, prawo do zapisu do folderu oznacza możliwość modyfikacji jego zawartości, czyli tworzenia i usuwania elementów w jego wnętrzu. Gdy mamy prawo do zapisu do folderu to możemy usuwać z niego pliki, nawet gdy nei mamy praw do tych plików.

Są jednak sytuacje, gdy użytkownicy powinni mieć nieograniczoną możliwość tworzenia plików w danym folderze, ale nie powinni mieć możliwości usuwania z niego plików innych niż tylko swoje. Przykład takiego folderu? No na przykład folder /tmp. Użytkownicy muszą mieć prawo dowolnego tworzenia i usuwania w nim plików, ale tylko swoich. Nie powinni mieć prawa usuwania w nim plików innych użytkowników.

I tu przychodzi nam z pomocą sticky bit. Nadanie tego bitu do folderu oznacza, że tylko właściciel tego folderu oraz właściciele poszczególnych plików mają możliwość usuwania tych plików. Takie ustawienie doskonale sprawdza się dla wspomnianego już folderu /tmp. Jego właścicielem jest root, ale others mają m.in prawo do zapisu do folderu. Do tego jest ustawiony jeszcze sticky bit. Suma sumarum, wszyscy mogą tworzyć dowoli pliki w tym folderze, ale tylko root i właściciele mogą usuwać swoje pliki.

Oznaczenie literowe tegi bitu to: t. Więc, dla przykładu, aby nadać folderowi ten bit dajemy poniższą komendę.

chmod +t nazwa_folderu

Kiedy odczytujemy uprawnienia do folderu, to sticky bit pojawia się jako litera t lub T zamiast ostatniego x. Przykładowo…

d rwx rwx rwt
d rwx rwx rwT

Czym się różni małe t od dużego T? Małe t jest połączeniem praw wykonania oraz sticky bit – czyli standardowe połączenie. Duże T oznacza, że jest ustawiony sticky bit, ale nie ma przypisanego x, czyli praw wykonania do folderu. Ta ostatnia konfiguracja nie jest stosowana, gdyż nie ma większego sensu – bez praw wykonania i tak nie bylibyśmy w stanie niczego usunąć, ale istnieje, gdyż jest możliwa do zapisania w polu bitowym uprawnieneń.