it-swarm.dev

Co je to „umask“ a jak to funguje?

Věřím, že umask je něco, co ovládá oprávnění soubor , ale tomu plně nerozumím.

Po spuštění umask 0644 v terminál nemůžu číst soubory, které vytvářím pomocí textového editoru příkazového řádku nano. Všiml jsem si, že oprávnění tohoto souboru jsou nastavena na 0022 místo výchozí 0755.

Jak umask funguje? Myslel jsem, že bych mohl odstranit každou číslici z umask z 0777, 7 - 6 = 1 a 7 - 4 = 3, takže očekávám, že oprávnění budou 0133, ale zjevně tomu tak není.

  1. Co je to umask přesně? Vysvětlete mi to, jako bych byl "Linux noob"
  2. Jak mohu vypočítat pomocí umask?
  3. Jaké jsou případy použití pro umask?
200
Lekensteyn

Umask funguje jako sada oprávnění, která aplikace nemohou nastavit na soubory. Je to maska ​​vytváření režimu souborů pro procesy a nelze ji nastavit pro samotné adresáře. Většina aplikací by nevytvářela soubory s nastavenými oprávněními ke spouštění, takže by měly výchozí nastavení 666, Které je poté změněno pomocí umask.

Když jste nastavili umask na odebrání bitů pro čtení a zápis pro vlastníka a bitů pro čtení pro ostatní, výchozí nastavení, jako je například 777 V aplikacích, by mělo za následek, že oprávnění souboru budou 133. To by znamenalo, že vy (a jiní) byste mohli soubor spustit, a ostatní by do něj mohli zapisovat.

Pokud si přejete, aby soubory nebyly čteny/zapisovány/spouštěny nikým jiným než vlastníkem, měli byste použít umask jako 077 K vypnutí těchto oprávnění pro skupinu a další.

Naproti tomu umask 000 Způsobí, že nově vytvořené adresáře budou čitelné, zapisovatelné a odstranitelné pro všechny (oprávnění budou 777). Takový umask je vysoce nejistý a neměli byste nikdy nastavit umask na 000.

Výchozí umask na Ubuntu byl 022, Což znamená, že nově vytvořené soubory jsou čitelné pro všechny, ale pouze pro zápis vlastníkem:

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

Počínaje Ubuntu Oneiric (11.10) byl výchozí umask uvolněn na 002, Což rozšiřuje přístup pro zápis do skupiny vlastníků:

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr  1 19:15 new-file-name

Prohlížení a úprava umask

Chcete-li zobrazit aktuální nastavení umask, otevřete terminál a spusťte příkaz:

umask

Chcete-li změnit nastavení umask aktuální Shell na něco jiného, ​​řekněte 077, spusťte:

umask 077

Chcete-li otestovat, zda toto nastavení funguje nebo ne, můžete vytvořit nový soubor (oprávnění souboru k existujícímu souboru nebudou ovlivněna) a zobrazit informace o soubor spusťte:

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

Nastavení umask je zděděno procesy spuštěnými od stejného prostředí. Například spusťte textový editor GEdit spuštěním gedit v terminálu a uložte soubor pomocí gedit. Všimnete si, že nově vytvořený soubor je ovlivněn stejným nastavením umask jako v terminálu.

Případ použití: systém pro více uživatelů

Pokud používáte systém sdílený více uživateli, je žádoucí, aby ostatní nemohli číst soubory ve vašem domovském adresáři. Proto je umask velmi užitečný. Upravit ~/.profile A přidat nový řádek s:

umask 007

Chcete-li se projevit, musíte se znovu přihlásit k této změně nastavení jazyka ~/.profile. Dále je třeba změnit existující oprávnění souborů k souborům ve vašem domovském adresáři odstraněním bitů pro čtení, zápis a spuštění pro celý svět. Otevřete terminál a proveďte:

chmod -R o-rwx ~

Pokud chcete, aby toto nastavení umask bylo použito pro všechny uživatele v systému, můžete upravit soubor profilu celého systému na /etc/profile.

146
ajmitch

Kromě dobré diskuse v přijaté odpovědi stojí za to přidat ještě několik bodů o umask, s odkazem na to, jak je řízena od 12.04 a dále.

Umask a pam_umask

Výchozí umask je nyní v /etc/login.defs a ne v /etc/profile, jako oficiální poznámka v /etc/profile přečte:

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

Pam_umask je stručně vysvětleno níže a mělo by se říci, že výchozí soubor, do kterého má uživatel vložit své vlastní nastavení umask, je stále ~/.profile.

Pam_umask je jedním z mnoha důležitých PAM modulů , které jsou rozhodující pro operaci Ubuntu (run apropos '^pam_' najít manuály pro ostatní). V manpage pro pam_umask poznamenává se, že

pam_umask je modul PAM pro nastavení masky vytváření režimu souboru v aktuálním prostředí. Umask ovlivňuje výchozí oprávnění přiřazená nově vytvořeným souborům.

Poznámka o výchozím umask

Nové složky v $HOME lze vytvořit pomocí mkdir s výchozími oprávněními 775 a soubory vytvořené pomocí touch s výchozími oprávněními 664, i když je výchozí umask 022. Zdá se, že je to nejprve protichůdné a stojí za to vysvětlit .

I když je výchozí umask na Ubuntu 022, není to celý příběh, protože v /etc/login.defs, které umask umí být 002 pro uživatele bez oprávnění root, pokud je podmínka splněna (viz výňatek níže). Při normální instalaci /etc/login.defs obsahuje nastavení USERGROUPS_ENAB yes. Tohle je co

Umožňuje nastavení bitů skupiny umask tak, aby byly stejné jako bity vlastníka (příklady: 022 -> 002, 077 -> 007) pro uživatele bez oprávnění root, pokud je uid stejný jako gid a uživatelské jméno je stejné jako primární skupinové jméno.

Z tohoto důvodu vidíte následující s stat, když se vytvoří nová složka s mkdir v jednom uživatelském systému, jako je moje (uid a gid jsou stejné):

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

Další informace viz man pam_umask a buntu manuály online .

38
user76204

To je dost staré, ale to stojí za zmínku. Vypočítat pro umask, na rozdíl od oprávnění systému souborů. Osmičkové umask jsou vypočteny pomocí bitového A unárního doplnění argumentu pomocí bitového NOT. Osmičkové notace jsou následující:

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

Pak si můžete spočítat a nastavit umask správné premisy jako:

$ 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

Výpočet konečného oprávnění pro soubory

Jednoduše odečtěte umask od základních oprávnění a určete konečné oprávnění pro soubor takto:

666 – 022 = 644
  • Základní oprávnění k souborům: 666
  • hodnota umask: 022
  • odečtením získáte oprávnění nového souboru (666-022): 644 (rw-r–r–)

Výpočet konečného povolení pro adresáře

Jednoduše odečtěte umask od základních oprávnění a určete konečné oprávnění pro adresář následujícím způsobem:

777 – 022 = 755
  • Základní oprávnění adresáře: 777
  • hodnota umask: 022
  • Odečtením získáte oprávnění nového adresáře (777-022): 755 (rwxr-xr-x)
35
amrx

Jiní odpověděli, velmi dobře vysvětlili pojem umaskování a proč je to nutné. Dovolte mi přidat dva centy a uvedu matematický příklad toho, jak jsou oprávnění skutečně vypočítávána.

Zaprvé, „maska“ neznamená „odečíst“, v aritmetickém smyslu - není zahrnuta žádná půjčka ani přenášení, za druhé, umask je maska; není to číslo, které se má odečíst.

Zatřetí maska ​​vypne bity povolení. Pokud jsou již vypnuty, umask nezmění oprávnění,

Předpokládejme například, že musíte odmaskovat 077 ze systémových předvoleb pro soubory, které jsou 666 a adresáře, které jsou 777.

Příkaz, který použijete, je:

umask 077

(odmaskovat hodnotu v binární, 000 111 111)

Odmaskování udělá to, že vypne některý z prvních šesti LSB (nejméně významných bitů), pokud jsou 1 a nezmění se, pokud již některý z nich je vypnutý.

Výpočet konečného povolení je následující:

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

Pozorujte, jak oba 110 hodnoty se změnily na 000.

Podobně,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
34
Sufiyan Ghori

Základní koncept:

Pokud jste jako většina lidí a nerozumíte tomu, co je sakra "osmičkové umasky vypočteny pomocí bitového A A unárního doplnění argumentu pomocí bitového NOT" znamená, zde je moje jednoduché vysvětlení:

Nejprve přemýšlejte o tom, co je „maska“. Maska něco blokuje. Myslete na maskovací pásku. V tomto případě je umask jako maskovací páska pro blokování/deaktivaci oprávnění při vytváření nového souboru nebo adresáře.

Výchozí oprávnění při vytváření nového adresáře je octal 777 (111 111 111) a nový soubor je octal 666 (110 110 110). Umask jsme nastavili tak, aby blokovala/deaktivovala určitá oprávnění.

  • Maskovací bit 1 Znamená blokovat/deaktivovat toto oprávnění (umístit maskovací pásku přes tento bit).
  • Maskovací bit 0 Umožní povolení procházet (žádná maskovací páska přes tento bit).

Maska octal 022 (000 010 010) tedy znamená deaktivovat group write A others write A povolit všechna další oprávnění projít.

Výpočet:

Zde je příklad výpočtu nového souboru (výchozí oprávnění 666) s 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)

Při vytváření nového souboru tak skončíte s výsledkem 644.

Snadnější způsob:

Pokud vás však výpočty inverzní masky jen pletou, existuje jednodušší způsob, jak použít symbolickou notaci umask. Když použijete tuto metodu, pak pouze určujete průchozí bity místo bitů masky.

  • umask u=rwx,g=rx,o=rx Znamená povolit průchod pro user rwx, group rx, other rx. Což znamená zakázat group w, others w. Pokud spustíte tento příkaz a poté zaškrtnete umask, dostanete 022.
  • umask u=rwx,g=,o= Znamená povolit průchod pro user rwx. Což znamená zakázat veškerý přístup pro group a others. Pokud spustíte tento příkaz a poté zaškrtnete umask, dostanete 077.

Výpočet bonusu:

Pokud vlastně chcete pochopit, co "osmičkové umasky se počítají pomocí bitového AND A unárního doplnění argumentu pomocí bitového NOT" znamená, zde je nějaká logika tabulky, které mohou pomoci demonstrovat. Nezapomeňte, že bit masky 1 Znamená deaktivovat, 0 Znamená projít.

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)

Pokud vytvoříte tabulku pomocí funkce NOT(mask), nyní je to pouze jednoduchá logická tabulka 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)

Vzorec pro to je: result = perm AND (NOT mask)

16
wisbucky