UMASK, dziedziczenie uprawnień

Damian Stlemach

Omawiając tematykę uprawnień nie sposób nie wspomnieć o mechanizmie ich dziedziczenia. W przeciwieństwie do systemów Windows, w Ubuntu oraz innych systemach opartych na jądrze Linux, domyślnie zjawisko dziedziczenia uprawnień nie występuje. To znaczy pliki i katalogi, które tworzone są w zasobie z określonymi uprawnieniami takich samach uprawnień nie będą mieć. Każdy pliki i katalog tworzony w katalogu domowym użytkownika ma uprawnienia domyślne 775 dla katalogów oraz 664 dla plików. W przypadku katalogu domowego użytkownika ROOT, a także katalogu głównego, uprawniania są ustawione na 755 dla katalogów oraz 644 dla plików. Jeśli chcemy, aby nowo tworzone zasoby w danym katalogu miały inne uprawniania no to możemy zastosować mechanizm zwany umask. Umask definiuje domyślne uprawnienia dla zasobów tworzonych w katalogu.

Jeśli chcemy sprawdzić jaką maskę mamy ustawioną w danym katalogu, wykonujemy po prostu polecenie umask. W przypadku umask mamy do czynienia z odwrotnością liczb określających uprawnienia. Jeśli maska jest ustawiona na 0002 to znaczy, że właściciel ma pełne prawa do zasobu (0002: od 7 odjęto 0, co daje 7), analogicznie grupa (0002: od 7 odjęto 0, co daje 7), a pozostali mają odczyt i wykonanie (0002: od 7 odjęto 2 co daje 5). Pierwsze0 od lewej strony to bity specjalne, ich tutaj nie bierzemy pod uwagę. W przypadku plików uprawnienia domyślne są na poziomie 664, bo domyślnie dla plików systemy z jądrem Linux nie dają prawa execute przy tworzeniu, tak więc pomimo ustawionej maski pliki domyślnie mają uprawnienia 664. Maskę oczywiście można zmodyfikować wydając polecenie umask.

Przykłady użycia:

Pełne uprawnienia dla wszystkich:

umask 000

Pełne uprawnienia dla właściciela, dla grupy oraz pozostałych brak uprawnień:

umask 077

Pełne uprawnienia dla właściciela, grupy, dla pozostałych brak uprawnień:

umask 007

Pełne uprawnienia dla wszystkich, dla grupy tylko odczyt i wykonanie, dla pozostałych tylko odczyt:

umask 026

Jeśli ustawimy konkretną maskę dla katalogu i w tym katalogu utworzymy kolejne podkatalogi to tutaj dziedziczenie będzie działać, ale tylko jeśli podkatalogi będzie tworzył użytkownik, który ustawił maskę, bo co ważne maska nie jest ustawieniem dostępnym dla innych użytkowników. To znaczy, że kiedy na tym katalogu będzie pracował inny użytkownik to dla niego maska nie będzie taka jak ustalił użytkownik tworzący katalog (właściciel), tylko domyślna. Należy o tym pamiętać! Ustawiona maska działa też tylko podczas aktywnej sesji, to znaczy jeśli użytkownik zamknie połączenie i zaloguje się ponownie to maska powróci do domyślnych uprawnień.

Pojawia się teraz pytanie czy da się zrobić tak, aby zawsze nowo tworzone zasoby w jakimś katalogu miały te same prawa dla wszystkich użytkowników. No pewnie, jest to możliwe i co ważne bardzo często używane. Chmod to bardzo stary system nadawania uprawnień. Nieco mało elastyczny i przy bardziej zaawansowanych ustawieniach czy zadaniach niesprawdzający się zbyt dobrze. Na szczęście istnieje również bardziej rozbudowany systemu uprawnień oparty na listach kontroli dostępu do plików i katalogów (setfacl).

Jeśli chcemy skonfigurować katalog tak, aby wszystkie tworzone w nim zasoby miały, np. zawsze pełne prawa dla wszystkich no to możemy wykonać takie polecenia:

chmod 777 nazwa_katalogu (lub ścieżka)

a dalej

setfacl –R –d –m u::rwx nazwa_katalogu (lub ścieżka)

Następny wpis