EnglishPolski
Czym właściwie jest umask?
Linux

Czym właściwie jest umask?

Mechanizm maski w systemie praw dostępu (umask) to taki element systemu Linux którego nie potrafiłem dobrze zrozumieć, dopóki nei zagłębiłem się nieco głebiej w sam mechanizm uprawnień. W tym artykule postaram się wyjaśnić do czego służy maska, jak poprawnie jej używać, i dlaczego jest tak ważna dla bezpiczeństwa systemu.

Czym są uprawnienia?

Zasadniczo, każdy plik i katalog w systemie Linux ma swojego właściciela oraz grupę. Dodatkowo, każdy z tych elementów ma zdefiniowane swoje uprawnienia, okreslające co może zrobić z danym plikiem lub katalogiem.

Uprawnienia możemy zdefiniować przez wartość liczbową lub symboliczną.

Szybka ściągawka

Uprawnienie Opis Symbol Wartość liczbowa
Read (r) Pozwala na odczyt pliku lub katalogu r 4
Write (w) Pozwala na modyfikację pliku lub katalogu w 2
Execute (x) Pozwala na wykonanie pliku lub wejście do katalogu x 1

Określony poziom uprawnień dla każdego typu jest sumą wartości liczbowych tych trzech opcji., tzn:

Uprawnienia Wartość liczbowa
rwx 7
rw- 6
r-x 5
r– 4
-wx 3
-w- 2
–x 1
0

Uprawnienia pliku możemy zobaczyć używając polecenia ls -l w terminalu zaraz obok przede wszystkim informacji o właścicielu i grupie:

$ ls -l /etc/

Zwróci nam zawartość katalogu etc wraz z uprawnieniami:

drwxr-xr-x 2 root root       4096 May  6  2025 PackageKit
drwxr-xr-x 8 root root       4096 Jan  2  2025 X11
-rw-r--r-- 1 root root       3028 Nov 22  2023 adduser.conf
drwxr-xr-x 2 root root       4096 Jan  4 07:23 alternatives
drwxr-xr-x 3 root root       4096 Dec  1 14:18 apache2
drwxr-xr-x 3 root root       4096 Feb  2 11:06 apparmor

Przykład oczywiście skrócony dla czytelności.

Czym jest umask?

Każdy plik i katalog w momemncie jego utworzenia ma przypisywane domyślne uprawnienia. Chodzi oczywiście o to, by nie trzeba było za każdym razem ręcznie definiować tych ustawień dla każdego nowo utworzonego zasobu.

Domyślne ustawienia są określane przez kernel, ale możemy je zmodyfikować właśnie za pomocą mechanizmu umask, w momencie tworzenia katalogu. Łatwo to zapamiętać na zasadzie odejmowania pod kreską:

Odejmujemy wartość maski od domyślnych uprawnień, by otrzymać wartość która zostanie faktycznie ustawiona. Dla każdego z trzech typów użytkowników (właściciel, grupa, inni) należy zrobić to osobno.

Rozważmy taki przykład: Domyślne uprawnienia dla katalogu to 777 (rwxrwxrwx), a dla pliku to 666 (rw-rw-rw-).

Najczęście spotykana wartość maski to 022.

Dla katalogu wyglądałoby to tak:

Typ użytkownika Działanie Wynik
Właściciel 7 - 0 7 (rwx)
Grupa 7 - 2 5 (r-x)
Inni 7 - 2 5 (r-x)

Z kolei dla pliku:

Typ użytkownika Działanie Wynik
Właściciel 6 - 0 6 (rw-)
Grupa 6 - 2 4 (r–)
Inni 6 - 2 4 (r–)

Zmiana ustawienia maski

Najprostszym sposobem na zmianę ustawień maski w danej sesji terminala jest użycie polecenia umask z odpowiednią wartością:

umask 011

Powyższe polecenie ustawi maskę na 011, co oznacza, że nowe pliki będą miały uprawnienia 655 (rw-r-xr-x) a katalogi 766 (rwxrw-rw-).

Kwestia sensowności tej konkretnej maski jest już zgoła inną sprawą.

Jeżeli nie podasz żadnej wartości, polecenie umask wyświetli aktualne ustawienia maski w formie liczbowej.
Np. u mnie:

022

Pamiętaj, że ta zmiana nie jest trwała, i po zamknięciu sesji terminalowej nie zostanie zapamiętana. Aby zmienić te ustawienia na stałe, najprostszym sposobem jest dodanie polecenia umask do pliku konfiguracji powłoki, np. ~/.bashrc lub ~/.zshrc:

Back to Top