Co to jest „umask” i jak działa?

190

Uważam, że umask to coś, co kontroluje uprawnienia do plików , ale nie do końca to rozumiem.

Po uruchomieniu umask 0644w terminalu nie mogę odczytać plików, które tworzę za pomocą edytora tekstu z wiersza poleceń nano. Zauważyłem, że uprawnienia do tego pliku są ustawione 0022na domyślne 0755.

Jak działa umask? Myślałem, że może po prostu usunąć każdą cyfrę w umask z 0777, 7 - 6 = 1a 7 - 4 = 3, więc spodziewam się uprawnienia 0133, ale jak widać, nie jest to przypadek.

  1. Czym dokładnie jest umask? Wytłumacz mi to, jakbym był „Linux noob”
  2. Jak obliczyć za pomocą umask?
  3. Jakie są przypadki użycia umask?
Lekensteyn
źródło
app_mode 666 rw- rw- rw- umask 644 --0 -00 -00 file_mode 022 --- -w- -w-
grabantot

Odpowiedzi:

143

Umask działa jako zestaw uprawnień, których aplikacje nie mogą ustawić dla plików. Jest to maska ​​do tworzenia trybów plików dla procesów i nie można jej ustawić dla samych katalogów. Większość aplikacji nie tworzy plików z ustawionymi uprawnieniami do wykonywania, więc będą miały wartość domyślną 666, która jest następnie modyfikowana przez umask.

Ponieważ ustawiłeś umask, aby usuwał bity odczytu / zapisu dla właściciela i bity odczytu dla innych, domyślnym ustawieniem, takim jak 777w aplikacjach, byłyby uprawnienia do plików 133. Oznaczałoby to, że Ty (i inni) możesz wykonać plik, a inni będą mogli do niego pisać.

Jeśli chcesz, aby pliki nie były odczytywane / zapisywane / wykonywane przez nikogo innego niż właściciela, powinieneś użyć umask, 077aby wyłączyć te uprawnienia dla grupy i innych osób.

W przeciwieństwie do tego, umask of 000sprawi, że nowo utworzone katalogi będą czytelne, zapisywalne i dostępne dla każdego (uprawnienia będą 777). Taki umask jest bardzo niepewny i nigdy nie powinieneś ustawiać go 000.

Domyślnym umask na Ubuntu było 022to, że nowo utworzone pliki są czytelne dla wszystkich, ale tylko do zapisu przez właściciela:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

Począwszy od Ubuntu Oneiric (11.10) domyślna umask została zrelaksowana 002, co rozszerza dostęp do zapisu do grupy właściciela:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr  1 19:15 new-file-name

Przeglądanie i modyfikowanie umask

Aby wyświetlić bieżące ustawienie umask, otwórz terminal i uruchom polecenie:

umask

Aby zmienić ustawienie umask bieżącej powłoki na coś innego, powiedz 077, uruchom:

umask 077

Aby sprawdzić, czy to ustawienie działa, czy nie, możesz utworzyć nowy plik (nie wpłynie to na uprawnienia do istniejącego pliku) i wyświetlić informacje o pliku, uruchom:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

Ustawienie umask jest dziedziczone przez procesy uruchomione z tej samej powłoki. Na przykład uruchom edytor tekstu GEdit, uruchamiając go geditw terminalu i zapisz plik za pomocą gedit. Zauważysz, że na nowo utworzony plik ma wpływ to samo ustawienie umask, co w terminalu.

Przypadek użycia: system dla wielu użytkowników

Jeśli korzystasz z systemu współdzielonego przez wielu użytkowników, pożądane jest, aby inni nie mogli czytać plików w twoim katalogu domowym. W tym celu umask jest bardzo przydatny. Edytuj ~/.profilei dodaj nową linię za pomocą:

umask 007

Musisz ponownie zalogować się, aby ta zmiana umask w została ~/.profilezastosowana. Następnie musisz zmienić istniejące uprawnienia do plików w katalogu domowym, usuwając bit odczytu, zapisu i wykonania dla świata. Otwórz terminal i wykonaj:

chmod -R o-rwx ~

Jeśli chcesz zastosować to ustawienie umask do wszystkich użytkowników w systemie, możesz edytować plik profilu systemowego pod adresem /etc/profile.

ajmitch
źródło
3
Co oznaczają cyfry w umasku? Dlaczego to 777oznacza, że ​​grupa i inni będą mogli do niej pisać, a jednocześnie 077nie mogą?
HelloGoodbye
3
Mówisz też, że jeśli umask jest 000, to uprawnienie do pliku będzie 777. Więc przy domyślnej masce 022, czy uprawnienia do pliku nie powinny być 755, tzn. Odpowiadać -rwxr-xr-x, czy nie -rw-r--r--?
HelloGoodbye
12
Muszę przyznać, że to wyjaśnienie pomieszało mnie bardziej niż pomogło.
Connel Hooley
8
zauważ, że domyślny umask Ubuntu zmienił się na 0002 zaledwie miesiąc po opublikowaniu tej odpowiedzi.
Jeff Puckett
7
@HelloGoodbye, jeśli umask jest, 000żadne uprawnienia nie zostaną usunięte. aplikacje takie jak touchi nanodomyślnie tworzą pliki, 666więc pozwolenie na plik pozostanie, 666ale umask z 022usunie bity zapisu dla grupy i innych, więc 666zostanie zredukowany do 644aka. -rw-r--r--Zastanów się, mkdirktóry domyślny tryb tworzenia 777z umaską 022zmniejszy uprawnienia do755
Jeff Puckett
38

Oprócz dobrej dyskusji w przyjętej odpowiedzi, warto dodać jeszcze kilka punktów umask, w odniesieniu do tego, jak jest zarządzana w 12.04 i później.

Umask i pam_umask

Domyślny umask jest teraz włączony, /etc/login.defsa nie włączony /etc/profile, jak /etc/profileczytamy w oficjalnej notatce :

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umaskjest krótko wyjaśnione poniżej i należy powiedzieć, że domyślny plik, w którym użytkownik może umieścić swoje niestandardowe ustawienie umask, jest nadal ~/.profile.

Pam_umaskjest jednym z wielu ważnych modułów PAM, które są kluczowe w działaniu Ubuntu (uruchom, apropos '^pam_'aby znaleźć strony podręcznika dla innych). W manpage za pam_umaskto należy zauważyć, że

pam_umask to moduł PAM do ustawiania maski tworzenia trybu plików dla bieżącego środowiska. Umask wpływa na domyślne uprawnienia przypisane do nowo tworzonych plików.

Uwaga na temat domyślnego umask

Nowe foldery w $HOMEmogą być tworzone mkdirprzy domyślnych uprawnieniach 775, a pliki tworzone przy touchdomyślnych uprawnieniach 664, nawet jeśli domyślnym umask jest 022. Z początku wydaje się to sprzeczne i warto to wyjaśnić.

Chociaż domyślnym umask jest 022 w Ubuntu, to nie jest cała historia, ponieważ jest ustawienie, /etc/login.defsktóre pozwala umask na 002 dla użytkowników innych niż root, jeśli warunek jest spełniony (patrz fragment poniżej). W normalnej instalacji /etc/login.defszawiera ustawienie USERGROUPS_ENAB yes. Co to jest

Umożliwia ustawienie bitów grupy umask na takie same jak bity właściciela (przykłady: 022 -> 002, 077 -> 007) dla użytkowników innych niż root, jeśli identyfikator użytkownika jest taki sam jak gid, a nazwa użytkownika jest taka sama jak nazwa podstawowa Nazwa grupy.

Dlatego widzisz, co następuje, statgdy nowy folder jest tworzony mkdirw systemie jednego użytkownika, takim jak mój (identyfikator użytkownika i identyfikator użytkownika są takie same):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

Więcej informacji można znaleźć man pam_umaskna stronach internetowych Ubuntu .

Alex
źródło
Wygląda na to, że w drugiej części czegoś brakuje? (USERGROUP_ENABLE?) +1 za zaktualizowane informacje
Lekensteyn
2
@ Lekensteyn O dziwo, ustawienie /etc/login.defsjest zdecydowanie USERGROUPS_ENAB yespo sprawdzeniu. Składnia tego pliku jest nieco nietypowa.
Właśnie sprawdziłem plik i źródło i masz rację, te (i niektóre inne) ustawienia mają mylącą nazwę „_ENAB”.
Lekensteyn,
33

To jest dość stare, ale warto o tym wspomnieć. Aby obliczyć dla umask, w przeciwieństwie do uprawnień systemu plików. Oktasowe umasks są obliczane za pomocą bitowego AND niepowtarzalnego uzupełnienia argumentu za pomocą bitowego NOT. Notacje ósemkowe są następujące:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Następnie możesz obliczyć ustawienie umask odpowiednich poprawek, takich jak:

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

Obliczanie ostatecznego zezwolenia na pliki

Możesz po prostu odjąć umask od uprawnień podstawowych, aby określić ostateczne uprawnienie do pliku w następujący sposób:

666 – 022 = 644
  • Uprawnienia do bazy plików: 666
  • wartość umask: 022
  • odejmij, aby uzyskać uprawnienia do nowego pliku (666-022):644 (rw-r–r–)

Obliczanie ostatecznego zezwolenia na katalogi

Możesz po prostu odjąć umask od uprawnień podstawowych, aby określić ostateczne uprawnienie do katalogu w następujący sposób:

777 – 022 = 755
  • Podstawowe uprawnienia katalogu: 777
  • wartość umask: 022
  • Odejmij, aby uzyskać uprawnienia do nowego katalogu (777-022):755 (rwxr-xr-x)
amrx
źródło
3
Nie sądzę, że w ten sposób obliczane są ostateczne zezwolenia, co jeśli wartość odmaskowania 077byłaby 666-077w takim przypadku odejmowana ?
Sufiyan Ghori
5
@ SufiyanGhori Baron wyjaśnienia dotyczące uprawnień do plików nie są kompletne. W twoim przypadku i wszelkich przyszłych obliczeniach, dla łatwego zapamiętania, powinieneś pamiętać o odjęciu ich w ten sposób: 6-0 6-7 6-7 jeśli jakikolwiek wynik z tych trzech jest równy -1, to niech to będzie 0. Więc my mają końcowy wynik 600
Huy.PhamNhu
1
@ Huy.PhamNhu To też nie jest poprawne. Z podstawowym uprawnieniem 666 i umask 033 na pewno nie dostaniesz 633.
maaartinus,
7
Nie nie nie. Nie można użyć odejmowania do obliczenia umask (działa z pewnymi wartościami, ale nie wszystkimi). Musisz myśleć o umask jako o „wyłączaniu bitów”. Zobacz inne odpowiedzi Sufiyana i Wisbucky.
wisbucky,
33

Inni, którzy odpowiedzieli, naprawdę dobrze wyjaśnili koncepcję umaskowania i dlaczego jest on wymagany. Pozwólcie, że dodam moje dwa centy i dam wam matematyczny przykład, w jaki sposób obliczane są uprawnienia.

Po pierwsze, „maska” nie oznacza „odejmowania” w sensie arytmetycznym - nie ma w tym żadnej pożyczki ani noszenia, po drugie umaskjest maską; to nie jest liczba do odjęcia.

Po trzecie, maska ​​wyłącza bity uprawnień. Jeśli są już wyłączone, umasknie zmienia to uprawnienia,

Załóżmy na przykład, że musisz zdemaskować 077ustawienia domyślne systemu dla plików, które są 666i katalogów, które są 777.

Polecenie, którego użyjesz, to:

umask 077

(odznacz wartość w formacie binarnym 000 111 111)

To, co zrobi to zdemaskowanie, spowoduje wyłączenie któregokolwiek z pierwszych sześciu LSB (najmniej znaczących bitów), jeśli są, 1i nie wprowadzi żadnych zmian, jeśli którykolwiek z nich jest już wyłączony.

Oto jak obliczane jest ostateczne pozwolenie:

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

Obserwuj, jak 110zmieniły się obie wartości 000.

Podobnie,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
Sufiyan Ghori
źródło
7
to powinna być odpowiedź!
Abdelouahab,
@SufiyanGhori Więc jeśli umask 177(001 111 111), wyłączy pierwsze 7 najmniej znaczących bitów, jeśli są1
Kasun Siyambalapitiya 20.09.17
to jest poprawne @KasunSiyambalapitiya
Sufiyan Ghori
1
taka jest formułaresult = file permission & (!umask)
Eric Hodgins
1
@EricHodgins: Tak, dokładnie.
Amit Naidu
14

Podstawowy pomysł:

Jeśli jesteś podobny do większości ludzi i nie rozumiesz, co do cholery „ósemkowe umaski są obliczane za pomocą bitowego AND niepowtarzalnego uzupełnienia argumentu za pomocą bitowego NOT” , oto moje proste wyjaśnienie:

Przede wszystkim zastanów się, czym jest „maska”. Maska coś blokuje. Pomyśl o taśmie maskującej. W tym przypadku umask jest jak taśma maskująca do blokowania / wyłączania uprawnień podczas tworzenia nowego pliku lub katalogu.

Domyślne uprawnienia podczas tworzenia octal 777 (111 111 111)nowego katalogu to, a nowy plik to octal 666 (110 110 110). Ustawiamy umask na blokowanie / wyłączanie niektórych uprawnień.

  • Maska 1oznacza sposób na zablokowanie / wyłączenie tego uprawnienia (nałożenie taśmy maskującej na ten bit).
  • Kawałek maski 0pozwoli na przejście pozwolenia (bez taśmy maskującej ten bit).

Więc octal 022 (000 010 010)maska oznacza wyłączenie group writei others write, przyznając inne uprawnienia przejść.

Obliczenie:

Oto przykładowe obliczenie nowego pliku (domyślne uprawnienie 666) z umaską 022:

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

Tak właśnie kończy się wynikiem 644 podczas tworzenia nowego pliku.

Łatwiejszy sposób:

Ale jeśli obliczenia odwrotnej maski tylko dezorientują, istnieje łatwiejszy sposób przy użyciu symbolicznej notacji umask. Kiedy używasz tej metody, określasz tylko bity tranzytowe zamiast bitów maski.

  • umask u=rwx,g=rx,o=rxśrodki pozwalają przejść przez user rwx, group rx, other rx. Co oznacza wyłączenie group w, others w. Jeśli uruchomisz to polecenie, a następnie sprawdź umask, dostaniesz 022.
  • umask u=rwx,g=,o=oznacza zezwól na przejście user rwx. Co implikuje wyłączenie całego dostępu dla groupi others. Jeśli uruchomisz to polecenie, a następnie sprawdź umask, dostaniesz 077.

Obliczanie premii:

Jeśli naprawdę chcesz zrozumieć, co „ósemkowe umasks są obliczane za pomocą bitowego AND niepowtarzalnego uzupełnienia argumentu za pomocą bitowego NOT” , oto kilka tabel logicznych, które mogą pomóc w zademonstrowaniu. Pamiętaj, że bit maski 1oznacza wyłączenie, 0oznacza przejście.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

Jeśli utworzysz tabelę NOT(mask), teraz jest to tylko prosty ANDstół logiczny!

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

Formuła jest następująca: result = perm AND (NOT mask)

wisbucky
źródło