W systemach operacyjnych uniksopodobnych polecenie umask zwraca, lub ustawia, wartość systemowej maski tworzenia trybu plików.
Ta strona omawia linuksową wersję polecenia umask.
Opis
W Linuksie i innych systemach operacyjnych uniksopodobnych nowe pliki są tworzone z domyślnym zestawem uprawnień. Konkretnie, uprawnienia nowego pliku mogą być ograniczone w specyficzny sposób przez zastosowanie „maski” uprawnień zwanej umask. Polecenie umask służy do ustawiania tej maski, lub pokazywania jej bieżącej wartości.
Syntaktyka
umask
Opcje
-S | Przyjmuje symboliczną reprezentację maski lub zwraca ją. |
maska | Jeśli podano prawidłową maskę, umask jest ustawiany na tę wartość. Jeśli nie podano maski, zwracana jest bieżąca wartość umask. |
Czym są uprawnienia i jak działają?
Jak zapewne wiesz, każdy plik w systemie ma powiązany z nim zestaw uprawnień używanych do ochrony plików: uprawnienia do pliku określają, którzy użytkownicy mogą mieć dostęp do tego pliku i jaki rodzaj dostępu mają do niego.
Istnieją trzy ogólne klasy użytkowników:
- Użytkownik, który jest właścicielem pliku („Użytkownik”).
- Użytkownicy należący do zdefiniowanej grupy własności pliku („Grupa”).
- Wszyscy inni („Inni”).
Z kolei dla każdej z tych klas użytkowników istnieją trzy rodzaje dostępu do pliku:
- Możliwość przeglądania zawartości pliku („Odczyt”).
- Możliwość zmiany zawartości pliku („Write”).
- Możliwość uruchomienia zawartości pliku jako programu w systemie („Execute”).
Więc, dla każdej z trzech klas użytkowników, istnieją trzy rodzaje dostępu. Te informacje razem wzięte tworzą uprawnienia pliku.
Jak reprezentowane są uprawnienia?
Są dwa sposoby reprezentowania uprawnień pliku: symbolicznie (używając symboli takich jak „r” dla odczytu, „w” dla zapisu, i „x” dla wykonania) lub za pomocą oktalnej wartości liczbowej.
Na przykład, kiedy listujesz zawartość katalogu w wierszu poleceń używając polecenia ls w następujący sposób:
ls -l
zobaczysz (wśród innych informacji) informacje o uprawnieniach dla każdego pliku. Tutaj jest ona przedstawiona symbolicznie, co wygląda jak w poniższym przykładzie:
-rwxr-xr--
Jest tu dziesięć symboli. Pierwszy myślnik („-„) oznacza, że jest to „zwykły” plik, innymi słowy, nie jest to katalog (lub urządzenie, lub inny specjalny rodzaj pliku). Pozostałe dziewięć symboli reprezentuje uprawnienia: rwxr-xr–. Te dziewięć symboli to tak naprawdę trzy zestawy po trzy symbole każdy, i reprezentują one odpowiednie konkretne uprawnienia, od lewej do prawej:
symbole | znaczenie |
---|---|
rwx | właściciel pliku może czytać, pisać lub wykonywać ten plik jako proces w systemie. |
r-x | anyone in the file’s group may read or execute this file, but not write to it. |
r– | anyone at all may read this file, but not write to it or execute its contents as a process. |
Określanie maski tworzenia pliku za pomocą symboli
Ogólna postać symboliczna maski jest następująca:
...
Symbol uprawnienia to dowolna kombinacja r (czytaj), w (pisz) lub x (wykonaj), jak opisano powyżej.
Symbol klasy użytkownika może być jednym lub więcej z poniższych:
u | User (właściciel pliku). |
g | Grupa (dowolny członek zdefiniowanej grupy pliku). |
o | Other (każdy inny). |
a | All (odpowiednik ugo). |
Operator uprawnień może być jednym z poniższych:
+ | zezwalaj na włączenie określonych uprawnień do plików dla określonych klas użytkowników (uprawnienia, które nie są określone, pozostają niezmienione w masce). |
– | zakazać włączania określonych uprawnień do plików dla określonych klas użytkowników (uprawnienia, które nie są określone, nie są zmieniane w masce). |
= | zezwalaj na włączanie określonych uprawnień do plików dla określonych klas użytkowników (uprawnienia, które nie zostały określone będą zabronione przez maskę podczas tworzenia pliku). |
Więc, na przykład, następujące polecenie umask:
umask u+w
ustawia maskę tak, że kiedy pliki są tworzone, mają uprawnienia, które pozwalają na zapis dla użytkownika (właściciela pliku). Reszta uprawnień pliku pozostanie niezmieniona w stosunku do domyślnych uprawnień systemu operacyjnego.
Wielokrotne zmiany mogą być określone przez oddzielenie wielu zestawów notacji symbolicznej przecinkami (ale nie spacjami!). Na przykład:
umask u-x,g=r,o+w
Ta komenda ustawia maskę tak, aby przy tworzeniu kolejnych plików miały one uprawnienia, które:
- zabraniają ustawiania uprawnienia execute dla właściciela pliku (użytkownika), pozostawiając resztę uprawnień właściciela bez zmian;
- zezwalają na uprawnienia read dla grupy, jednocześnie zabraniając uprawnień write i execute dla grupy;
- zezwalają na uprawnienia write dla innych, pozostawiając resztę pozostałych uprawnień bez zmian.
Zauważ, że jeśli użyjesz operatora równości („=”), wszystkie uprawnienia, które nie zostały określone, będą zabronione. Na przykład, polecenie
umask a=
Ustawia maskę tworzenia plików tak, aby nowe pliki były niedostępne dla wszystkich.
Określanie maski tworzenia plików za pomocą reprezentacji numerycznej
Maska tworzenia plików może być również reprezentowana numerycznie, za pomocą wartości ósemkowych (cyfry od 0 do 7). Podczas używania oktalnej reprezentacji numerycznej, pewne liczby reprezentują pewne uprawnienia, a liczby te są dodawane lub odejmowane od siebie, aby przedstawić ostateczną, połączoną wartość uprawnień. Konkretnie, liczby 1, 2 i 4 reprezentują następujące uprawnienia:
numer | pozwolenie |
---|---|
4 | read |
2 | write |
1 | execute |
Liczby te są używane, ponieważ każda kombinacja tych trzech liczb będzie unikalna. Poniższa tabela ilustruje ich unikalne kombinacje:
wartośćread + | wartośćwrite + | wartośćexecute = | wartość połączona: | symboliczny odpowiednik: | |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | ||
0 | 0 | 1 | 1 | x | |
0 | 2 | 0 | 2 | w | |
0 | 2 | 1 | 3 | wx | |
4 | 0 | 0 | 0 | 4 | r |
4 | 0 | 1 | 5 | rx | |
4 | 2 | 0 | 6 | rw | |
4 | 2 | 1 | 7 | rwx |
Dla każdej klasy użytkownika, jedna cyfra może reprezentować ich uprawnienia; używając powyższego przykładu, moglibyśmy reprezentować symboliczne uprawnienie rwxr-xr– używając trzycyfrowej liczby ósemkowej 754. Kolejność cyfr jest zawsze taka sama: Użytkownik, Grupa, Inne.
Inna cyfra uprawnień
W oktalnej reprezentacji uprawnień do plików, są tak naprawdę cztery cyfry. Trzy ważne cyfry, które omówiliśmy, to trzy ostatnie cyfry. Pierwsza cyfra jest specjalnym wskaźnikiem uprawnień do plików i dla celów tej dyskusji może być zawsze traktowana jako zero. Tak więc od tego momentu, kiedy omawiamy uprawnienia do plików 777, mogą być one również określane jako 0777.
Więc jak właściwie działa umask?
Umaska maskuje uprawnienia poprzez ograniczenie ich o pewną wartość.
Podsumowując, każda cyfra umaski jest „odejmowana” od domyślnej wartości systemu operacyjnego, aby dojść do wartości domyślnej, którą określisz. To nie jest tak naprawdę odejmowanie; technicznie rzecz biorąc, maska jest negowana (jej bitowy komplement jest brany) i ta wartość jest następnie stosowana do domyślnych uprawnień za pomocą operacji logicznej AND. W rezultacie umask mówi systemowi operacyjnemu, które bity uprawnień „wyłączyć”, gdy tworzy plik.
W Linuksie domyślna wartość uprawnień to 666 dla zwykłego pliku i 777 dla katalogu. Podczas tworzenia nowego pliku lub katalogu, jądro bierze tę domyślną wartość, „odejmuje” wartość umaski i nadaje nowym plikom wynikające z niej uprawnienia.
Ta tabela pokazuje jak każda cyfra wartości umask wpływa na uprawnienia do nowych plików i katalogów:
cyfra umaski | domyślne uprawnienia do plików | domyślne uprawnienia do katalogów |
---|---|---|
0 | rw | rwx |
1 | rw | rw |
2 | r | rx |
3 | r | r |
4 | w | wx |
5 | w | w |
6 | x | x |
7 | (no permission allowed) | (no permission allowed) |
Jeśli więc nasza wartość umask wynosi 022, to każdy nowy plik będzie miał domyślnie uprawnienia 644 (666 – 022). Podobnie, wszelkie nowe katalogi będą domyślnie tworzone z uprawnieniami 755 (777 – 022).
Przykłady
Aby zobaczyć aktualną wartość umask twojego systemu, wpisz polecenie:
umask
które zwraca umask twojego systemu jako czterocyfrową liczbę ósemkową, na przykład:
0002
Ponownie, pierwsze zero jest specjalną cyfrą zezwolenia i może zostać zignorowane; dla naszych celów, 0002 jest takie samo jak 002.
Aby zobaczyć to jako symboliczną reprezentację, użyj flagi -S:
umask -S
Która zwraca tę samą wartość symbolicznie, na przykład:
u=rwx,g=rwx,o=rx
gdzie u oznacza użytkownika, g oznacza grupę, a o oznacza inne. To mówi nam, że jeśli utworzymy nowy plik, będzie on miał domyślne uprawnienia 664, czyli 666 (domyślne uprawnienia dla plików) zamaskowane przez 002 (nasza wartość umask).
Sprawdźmy to tworząc nowy plik poleceniem touch:
touch testfile
A teraz zróbmy listę katalogów dla tego pliku:
ls -l testfile
-rw-rw-r-- 1 myusername myusername 0 Jan 7 14:29 testfile
Jak można się spodziewać, nowy plik ma uprawnienia -rw-rw-r–, czyli 0664: Właściciel i grupa mogą czytać lub pisać plik, a inni mogą go tylko czytać.
Następnie zmieńmy umask. Aby ustawić umask na 022, użyj polecenia:
umask 022
To jest to samo, co uruchomienie umask 0022; jeśli podasz tylko trzy cyfry, pierwsza cyfra zostanie przyjęta jako zero. Sprawdźmy, czy zmiana została dokonana:
umask
0022
A teraz utwórzmy nowy plik:
touch testfile2
A teraz wyświetlmy jego listę katalogów, z pierwszym utworzonym przez nas plikiem, używając symbolu wieloznacznego gwiazdki („*”), aby wyświetlić wszystkie pliki, których nazwa zaczyna się od „testfile”:
ls -l testfile*
-rw-rw-r-- 1 myusername myusername 0 Jan 7 14:29 testfile-rw-r--r-- 1 myusername myusername 0 Jan 7 14:39 testfile2
Jak widać, plik testfile2 ma uprawnienia 644.
Oto kilka innych przykładowych poleceń umask:
umask a+r
Ustawia maskę tak, aby nowe pliki pozwalały wszystkim użytkownikom na ich odczyt; inne uprawnienia pozostaną niezmienione w stosunku do domyślnych.
umask a-x
Ustawia maskę tak, że nowe pliki nie będą początkowo wykonywalne przez żadnego użytkownika; inne uprawnienia niezmienione od domyślnych.
umask u=rw,go=
Ustawia maskę tak, że nowe pliki będą odczytywalne i zapisywalne przez użytkownika, który jest właścicielem pliku, ale nie mogą być wykonywane; członkowie grupy i inni nie mają uprawnień dostępu do pliku.
umask 777
Uczyń nowe pliki niedostępnymi dla wszystkich – nikt nie może ich czytać, zapisywać ani wykonywać.
umask 000
Uczyń nowe pliki całkowicie dostępnymi (do odczytu, zapisu i wykonywania) dla absolutnie wszystkich. Jednakże, jest to zły pomysł. Nie rób tego.
chmod – Zmiana uprawnień do plików lub katalogów.
csh – Interpreter poleceń powłoki C.
ksh – Interpreter poleceń powłoki Korn.
sh – Interpreter poleceń powłoki Bourne’a.
Wykonywanie poleceń powłoki Bourne’a.