Uważam, że umask to coś, co kontroluje uprawnienia do plików , ale nie do końca to rozumiem.
Po uruchomieniu umask 0644
w 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 0022
na 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 = 1
a 7 - 4 = 3
, więc spodziewam się uprawnienia 0133
, ale jak widać, nie jest to przypadek.
- Czym dokładnie jest umask? Wytłumacz mi to, jakbym był „Linux noob”
- Jak obliczyć za pomocą umask?
- Jakie są przypadki użycia umask?
permissions
umask
Lekensteyn
źródło
źródło
app_mode 666 rw- rw- rw-
umask 644 --0 -00 -00
file_mode 022 --- -w- -w-
Odpowiedzi:
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
777
w aplikacjach, byłyby uprawnienia do plików133
. 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,
077
aby wyłączyć te uprawnienia dla grupy i innych osób.W przeciwieństwie do tego, umask of
000
sprawi, ż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ć go000
.Domyślnym umask na Ubuntu było
022
to, że nowo utworzone pliki są czytelne dla wszystkich, ale tylko do zapisu przez właściciela: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:Przeglądanie i modyfikowanie umask
Aby wyświetlić bieżące ustawienie umask, otwórz terminal i uruchom polecenie:
Aby zmienić ustawienie umask bieżącej powłoki na coś innego, powiedz 077, uruchom:
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:
Ustawienie umask jest dziedziczone przez procesy uruchomione z tej samej powłoki. Na przykład uruchom edytor tekstu GEdit, uruchamiając go
gedit
w 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
~/.profile
i dodaj nową linię za pomocą:Musisz ponownie zalogować się, aby ta zmiana umask w została
~/.profile
zastosowana. 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:Jeśli chcesz zastosować to ustawienie umask do wszystkich użytkowników w systemie, możesz edytować plik profilu systemowego pod adresem
/etc/profile
.źródło
777
oznacza, że grupa i inni będą mogli do niej pisać, a jednocześnie077
nie mogą?000
, to uprawnienie do pliku będzie777
. Więc przy domyślnej masce022
, czy uprawnienia do pliku nie powinny być755
, tzn. Odpowiadać-rwxr-xr-x
, czy nie-rw-r--r--
?000
żadne uprawnienia nie zostaną usunięte. aplikacje takie jaktouch
inano
domyślnie tworzą pliki,666
więc pozwolenie na plik pozostanie,666
ale umask z022
usunie bity zapisu dla grupy i innych, więc666
zostanie zredukowany do644
aka.-rw-r--r--
Zastanów się,mkdir
który domyślny tryb tworzenia777
z umaską022
zmniejszy uprawnienia do755
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.defs
a nie włączony/etc/profile
, jak/etc/profile
czytamy w oficjalnej notatce :Pam_umask
jest 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_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 innych). W manpage zapam_umask
to należy zauważyć, żeUwaga na temat domyślnego umask
Nowe foldery w
$HOME
mogą być tworzonemkdir
przy domyślnych uprawnieniach 775, a pliki tworzone przytouch
domyś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.defs
któ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.defs
zawiera ustawienieUSERGROUPS_ENAB yes
. Co to jestDlatego widzisz, co następuje,
stat
gdy nowy folder jest tworzonymkdir
w systemie jednego użytkownika, takim jak mój (identyfikator użytkownika i identyfikator użytkownika są takie same):Więcej informacji można znaleźć
man pam_umask
na stronach internetowych Ubuntu .źródło
/etc/login.defs
jest zdecydowanieUSERGROUPS_ENAB yes
po sprawdzeniu. Składnia tego pliku jest nieco nietypowa.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:
Następnie możesz obliczyć ustawienie umask odpowiednich poprawek, takich jak:
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
(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
(777-022)
:755 (rwxr-xr-x)
źródło
077
byłaby666-077
w takim przypadku odejmowana ?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
umask
jest maską; to nie jest liczba do odjęcia.Po trzecie, maska wyłącza bity uprawnień. Jeśli są już wyłączone,
umask
nie zmienia to uprawnienia,Załóżmy na przykład, że musisz zdemaskować
077
ustawienia domyślne systemu dla plików, które są666
i katalogów, które są777
.Polecenie, którego użyjesz, to:
(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ą,
1
i nie wprowadzi żadnych zmian, jeśli którykolwiek z nich jest już wyłączony.Oto jak obliczane jest ostateczne pozwolenie:
Obserwuj, jak
110
zmieniły się obie wartości000
.Podobnie,
źródło
umask 177
(001 111 111), wyłączy pierwsze 7 najmniej znaczących bitów, jeśli są1
result = file permission & (!umask)
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 tooctal 666 (110 110 110)
. Ustawiamy umask na blokowanie / wyłączanie niektórych uprawnień.1
oznacza sposób na zablokowanie / wyłączenie tego uprawnienia (nałożenie taśmy maskującej na ten bit).0
pozwoli na przejście pozwolenia (bez taśmy maskującej ten bit).Więc
octal 022 (000 010 010)
maska oznacza wyłączeniegroup write
iothers write
, przyznając inne uprawnienia przejść.Obliczenie:
Oto przykładowe obliczenie nowego pliku (domyślne uprawnienie 666) z umaską 022:
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ść przezuser rwx
,group rx
,other rx
. Co oznacza wyłączeniegroup w
,others w
. Jeśli uruchomisz to polecenie, a następnie sprawdźumask
, dostaniesz022
.umask u=rwx,g=,o=
oznacza zezwól na przejścieuser rwx
. Co implikuje wyłączenie całego dostępu dlagroup
iothers
. Jeśli uruchomisz to polecenie, a następnie sprawdźumask
, dostaniesz077
.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
1
oznacza wyłączenie,0
oznacza przejście.Jeśli utworzysz tabelę
NOT(mask)
, teraz jest to tylko prostyAND
stół logiczny!Formuła jest następująca:
result = perm AND (NOT mask)
źródło