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: