Co to jest "umask" i jak to działa?

157

Wierzę, że umask to coś, co kontroluje uprawnienia do plików , ale nie w pełni to rozumiem.

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

Jak działa umask? Pomyślałem, że mogę po prostu usunąć każdą cyfrę w umask z 0755 , 0777 i 7 - 6 = 1 , więc spodziewam się, że uprawnienia to 7 - 4 = 3 , ale widocznie tak nie jest.

  1. Czym dokładnie jest umask? Wyjaśnij mi, jakbym był "Linux noobem"
  2. Jak obliczyć za pomocą umask?
  3. Jakie są przypadki użycia dla umask?
zadawane Lekensteyn 22.05.2011, 22:42
źródło

5 odpowiedzi

124

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

Po ustawieniu umask do usunięcia bitów do odczytu i zapisu dla właściciela i bitów odczytu dla innych, wartość domyślna, taka jak 777 w aplikacjach, spowoduje, że uprawnienia do pliku wynoszą 133 . Oznaczałoby to, że Ty (i inni) moglibyście wykonać plik, a inni mogliby do niego pisać.

Jeśli chcesz, aby pliki nie były odczytywane / zapisywane / uruchamiane przez nikogo, ale przez właściciela, powinieneś użyć takiej maski jak 077 , aby wyłączyć te uprawnienia dla grupy & amp; inne.

Dla odróżnienia, umask z 000 sprawi, że nowo utworzone katalogi będą odczytywalne, zapisywalne i dostępne dla wszystkich (uprawnienia będą wynosić 777 ). Taka umask jest bardzo niepewna i nie powinieneś nigdy ustawiać umask na 000 .

Domyślną wartością umask na Ubuntu jest 022 , co oznacza, ż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

Przeglądanie i modyfikowanie umask

Aby wyświetlić aktualne ustawienie umask, otwórz terminal i uruchom polecenie:

umask

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

umask 077

Aby sprawdzić, czy to ustawienie działa, możesz utworzyć plik nowy (nie wpłynie to na uprawnienia do pliku 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 tekstów GEdit, uruchamiając gedit w terminalu i zapisz plik za pomocą programu gedit. Zauważysz, że na nowo utworzony plik wpływa to samo ustawienie umask, co w terminalu.

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

Jeśli korzystasz z systemu współdzielonego przez wielu użytkowników, inni użytkownicy nie mogą czytać plików w twoim katalogu domowym. Do tego bardzo przydatne jest umask. Edytuj ~/.profile i dodaj nową linię za pomocą:

umask 007

Musisz ponownie zalogować się, aby zmienić nazwę umask w ~/.profile , aby odniosła skutek. Następnie musisz zmienić istniejące uprawnienia do plików w twoim katalogu domowym, usuwając bit odczytu, zapisu i wykonania dla całego świata. Otwórz terminal i wykonaj:

chmod -R o-rwx ~

Jeśli chcesz, aby to ustawienie umask stosowane było dla wszystkich użytkowników w systemie, możesz edytować plik profilu dla całego systemu na /etc/profile .

    
odpowiedział ajmitch 22.05.2011, 22:59
źródło
33

Oprócz dobrej dyskusji w zaakceptowanej odpowiedzi, warto dodać trochę więcej punktów o umask , w odniesieniu do tego, jak jest ona zarządzana w 12.04 i później.

Umask i pam_umask

Domyślna liczba umask jest teraz w /etc/login.defs , a nie w /etc/profile , tak jak oficjalna notatka w /etc/profile czyta:

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

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

Pam_umask jest 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 pozostałych). Na stronie podręcznika dla pam_umask zaznaczono, że

  

pam_umask to moduł PAM służący do ustawienia maski tworzenia pliku w bieżącym środowisku. Umask wpływa na          domyślne uprawnienia przypisane do nowo utworzonych plików.

Notatka na domyślnej umasce

Nowe foldery w $HOME można utworzyć za pomocą mkdir z domyślnymi uprawnieniami 775 i plikami utworzonymi z touch z domyślnymi uprawnieniami 664, nawet jeśli domyślną umask jest 022. Wydaje się to na początku sprzeczne i jest warte wyjaśnienie.

Domyślna liczba umask wynosi 022 w systemie Ubuntu, ale nie jest to cała historia, ponieważ istnieje ustawienie w /etc/login.defs , które pozwala, aby umask miał wartość 002 dla użytkowników innych niż root, jeśli spełniony jest warunek (patrz fragment poniżej) . W normalnej instalacji /etc/login.defs zawiera ustawienie USERGROUPS_ENAB yes . Oto co

  

Włącza ustawienie bitów grupowych umask tak, 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 grupy podstawowej.

Z tego powodu, gdy zobaczysz następujący komunikat z stat , gdy tworzony jest nowy folder z mkdir w jednym systemie użytkownika, takim jak mój (uid i gid są takie same):

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

Aby uzyskać więcej informacji, zobacz man pam_umask i strony podręcznika Ubuntu w Internecie .

    
odpowiedział user76204 02.04.2013, 02:16
źródło
29

To jest dość stare, ale warto o tym wspomnieć. Aby obliczyć dla umask, w przeciwieństwie do uprawnień systemu plików. Osiowe umasky są obliczane poprzez bitowe AND z jednoargumentowego dopełnienia argumentu za pomocą bitowego NOT. Oktalne zapisy 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ć, aby ustawić prawidłowe umaskacje, takie 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 pozwolenia dla plików

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

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

Obliczanie ostatecznego pozwolenia dla katalogów

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

777 – 022 = 755
  • Uprawnienia podstawowe katalogu: 777
  • wartość umask: 022
  • Odejmij, aby uzyskać uprawnienia do nowego katalogu (777-022) : 755 (rwxr-xr-x)
odpowiedział amrx 06.04.2016, 10:27
źródło
24

Inni odpowiedzieli bardzo dobrze na pojęcie umaskowania i dlaczego jest ono wymagane. Pozwolę sobie dodać moje dwa centy i podać matematyczny przykład tego, jak faktycznie obliczane są uprawnienia.

Przede wszystkim "Maska" nie oznacza "odejmij", w znaczeniu arytmetycznym - nie ma żadnego zaciągnięcia ani przeniesienia, po drugie, umask jest maską; nie jest to liczba do odjęcia.

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

Załóżmy na przykład, że musisz zdekasować 077 z domyślnych ustawień systemowych dla plików o wartości 666 i katalogów o wartości 777 .

Polecenie, którego będziesz używać, to

umask 077

(usuń wartość binarną, 000 111 111 )

To, co zrobi to zdekonstruowanie, to wyłączenie któregokolwiek z pierwszych sześciu LSB (najmniej znaczących bitów), jeśli są one 1 i nie dokonają żadnych zmian, jeśli którekolwiek z nich są już wyłączone.

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 zmieniły się wartości 110 na 000 .

Podobnie

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
    
odpowiedział Sufiyan Ghori 05.06.2016, 16:09
źródło
9

Podstawowa koncepcja:

Jeśli jesteś jak większość ludzi i nie rozumiesz, co heck "ósemkowe umasky są obliczane przez bitowe AND i jednoargumentowe dopełnienie argumentu za pomocą bitowego NOT" oznacza, oto moje proste wyjaśnienie :

Przede wszystkim pomyśl o tym, czym jest "maska". Maska blokuje coś. 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 nowego katalogu to octal 777 (111 111 111) , a nowy plik to octal 666 (110 110 110) . Ustawiamy opcję umask, aby blokować / dezaktywować określone uprawnienia.

  • Bit maski 1 oznacza zablokowanie / dezaktywowanie tego uprawnienia (umieść taśmę maskującą nad tym bitem).
  • Bit maski 0 zezwoli na przejście (bez taśmy maskującej nad tym bitem).

Zatem maska octal 022 (000 010 010) oznacza, że ​​chcesz wyłączyć group write i others write , i pozwolić na przepuszczenie wszystkich innych uprawnień.

Obliczenie:

Oto przykład obliczenia nowego pliku (domyślne uprawnienie 666) z wartością 022 umask:

  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)

W ten sposób uzyskujesz wynik 644 podczas tworzenia nowego pliku.

Łatwiejszy sposób:

Ale jeśli obliczenia odwrotnej maski po prostu Cię mylą, jest łatwiejszy sposób użycia symbolicznej zapisu umask. Gdy używasz tej metody, właśnie określasz bity tranzytowe zamiast bitów maski.

  • umask u=rwx,g=rx,o=rx oznacza zezwolenie na przejście dla user rwx , group rx , other rx . Co implikuje wyłączenie group w , others w . Jeśli uruchomisz to polecenie, sprawdź umask , otrzymasz 022 .
  • umask u=rwx,g=,o= oznacza zezwolenie na przejście dla user rwx . Co implikuje wyłączenie dostępu dla group i others . Jeśli uruchomisz to polecenie, sprawdź umask , otrzymasz 077 .

Obliczanie premii:

Jeśli naprawdę chcesz zrozumieć, co "ósemkowe umasky są obliczane przez bitowe AND i jednoargumentowe uzupełnienie argumentu za pomocą bitowego NOT" oznacza to, że jest tu kilka tabel logicznych, które mogą pomóc w zademonstrowaniu. Pamiętaj, że bit maski 1 oznacza wyłączenie, 0 oznacza 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 tworzysz tabelę z NOT(mask) , teraz jest to prosta tablica logiczna AND !

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)

Więc formuła dla niego to: result = perm AND (NOT mask)

    
odpowiedział wisbucky 04.04.2017, 00:30
źródło

Przeczytaj inne pytania na temat tagów