Mi az "umask" és hogyan működik?

160

Úgy gondolom, hogy az umask valami, amely fájlengedélyeket ellenőrzi, de nem érti teljesen.

A terminálon futóumask 0644 futása után nem tudom olvasni az általam létrehozott fájlokat a parancssori szövegszerkesztővel nano. Észrevettem, hogy az adott fájl engedélyezése0022 -ra van állítva az alapértelmezett0755 helyett.

Hogyan működik az umask? Azt hittem, hogy eltávolítom az umask minden egyes számjegyét a0777, a7 - 6 = 1 és a7 - 4 = 3 -ból, ezért úgy gondolom, hogy az engedélyek0133, de nyilvánvalóan nem ez a helyzet.

  1. Mi az az umask pontosan? Magyarázd el nekem, hogy "Linux noob" vagyok
  2. Hogyan számolhatom el az umask-ot?
  3. Milyen felhasználási eseteket jelent az umask?
készlet Lekensteyn 22.05.2011 22:42
forrás

5 válasz

125

Az umask olyan engedélyek halmazaként működik, amelyeket az alkalmazások nem tudnak beállítani a fájlokra. Ez egy fájlmód-létrehozási maszk a folyamatokhoz , és nem állítható be a könyvtárak számára. A legtöbb alkalmazás nem hoz létre fájlokat a végrehajtási jogosultságokkal, ezért alapértelmezett értéke:666, amelyet az umask módosít.

Miután beállította az umaskot, hogy eltávolítsa az olvasási / írási biteket a tulajdonostól és az olvasási biteket mások számára, az alapértelmezettek, mint az777 az alkalmazásokban, a fájl engedélyek133 lesz. Ez azt jelentené, hogy Ön (és mások) végrehajthatja a fájlt, és mások képesek lennének írni rá.

Ha nem szeretne olvasni / írni vagy végrehajtani a fájlokat bárkinek, csak a tulajdonosnak, használjon egy umaskot, mint a077, hogy kikapcsolja a csoporthoz tartozó engedélyeket. mások.

Ezzel ellentétben a000 umask az újonnan létrehozott könyvtárakat olvashatja, írható és leszállítható mindenkinek (az engedélyek777 lesz). Az ilyen umask rendkívül bizonytalan, és soha ne állítsa be az umaskot000 -ra.

Az alapértelmezett umask az Ubuntuban022, ami azt jelenti, hogy az újonnan létrehozott fájlok mindenkinek olvashatóak, de csak a tulajdonos írható:

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

Az umask

megtekintése és módosítása

Az aktuális umask beállításának megtekintéséhez nyisson meg egy terminált és futtassa a parancsot:

umask

Ha szeretné megváltoztatni az aktuális shell másolatát, mondjuk 077, futtassa:

umask 077

Annak teszteléséhez, hogy ez a beállítás működik-e vagy sem, létrehozhat egy új fájlt (a meglévő fájl engedélyei nem lesznek hatással), és információkat jelenítenek meg a fájlról:

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

Az umask beállítást az ugyanabból a shellből indított folyamatok örökölik. Például indítsa el a GEdit szövegszerkesztőt agedit parancs végrehajtásával a terminálon, és mentse a fájlt a gedit segítségével. Észre fogod venni, hogy az újonnan létrehozott fájlt ugyanaz az umask beállítja, mint a terminál.

Alkalmazás: többfelhasználós rendszer

Ha olyan rendszerről van szó, amelyet több felhasználó oszt meg, akkor azt szeretné, ha mások nem tudnak olvasni a saját könyvtárában lévő fájlokat. Ezért egy umask nagyon hasznos. Szerkessze~/.profile -ot, és adj hozzá egy új sort:

umask 007

Vissza kell jelentkezned a~/.profile umask változás érvényesítéséhez. Ezután meg kell változtatnia a meglévő fájlengedélyeket a saját könyvtárában eltávolítva az olvasási, írási és végrehajtási bitet a világ számára. A terminál megnyitása és végrehajtása:

chmod -R o-rwx ~

Ha azt szeretné, hogy az umask beállítás a rendszer minden felhasználójára érvényes legyen, szerkesztheti a rendszer egészére kiterjedő profilfájlt a/etc/profile -ban.

    
válasz adott ajmitch 22.05.2011 22:59
forrás
35

Az elfogadott válaszban szereplő jó beszélgetés mellett érdemes még több pontot hozzáadni aumask -hoz képest, ahogy azt a 12.04-es és későbbiekben kezeljük.

Umask és pam_umask

Az alapértelmezett umask most/etc/login.defs -ban van, és nem a/etc/profile -ban, mint a/etc/profile olvasmányban szereplő hivatalos megjegyzés:

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

APam_umask röviden magyarázható, és azt kell mondani, hogy az alapértelmezett fájl, amellyel a felhasználó megadhatja az egyéni umask beállítását, még mindig~/.profile.

APam_umask egyike a fontos, PAM moduloknak , amelyek kulcsfontosságúak az Ubuntu mûködésében (futtassa aapropos '^pam_' -ot, hogy megtalálja a többi oldal man oldalát). A (z)pam_umask manpage esetében meg kell jegyezni, hogy

  

A pam_umask egy PAM modul az aktuális környezet fájlmód-létrehozó maszkjának beállításához. Az umask befolyásolja a          az újonnan létrehozott fájlokhoz rendelt alapértelmezett engedélyek.

Az alapértelmezett umask

megjegyzés

A$HOME új mappákatmkdir -al hozhatja létre az alapértelmezett 775 engedélyekkel és atouch alapértelmezett 664 jogosultsággal létrehozott fájlokkal, még akkor is, ha az alapértelmezett umask 022. Ez először ellentmondásosnak tűnik, és érdemes magyarázza.

Bár az alapértelmezett umask 022 az Ubuntuban, ez nem az egész történet, hiszen létezik olyan beállítás, amely a/etc/login.defs -ot jelenti, amely lehetővé teszi az umask 002-et a nem root felhasználók számára, ha egy feltétel teljesül (lásd az alábbi részletet) . Normál telepítés esetén a/etc/login.defs aUSERGROUPS_ENAB yes beállítást tartalmazza. Ez az, amit

  

Lehetővé teszi, hogy az umask csoport bitjeinek beállítása megegyezzen a tulajdonos bitekkel    (példák: 022 -> 002, 077 -> 007) a nem root felhasználók számára, ha az uid    ugyanaz, mint a gid, és a felhasználónév megegyezik az elsődleges csoportnévvel.

Ezért látja a következőket astat -al, ha egy új könyvtár létrehozása amkdir -ban egy olyan felhasználói rendszeren, mint az enyém (uid és gid ugyanaz):

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

További információ:man pam_umask és a Ubuntu manpages online .

    
válasz adott user76204 02.04.2013 02:16
forrás
30

Ez elég régi, de érdemes megemlíteni. Az umask kiszámításához, a fájlrendszeri jogosultságokkal ellentétben. Az oktális umaszkokat az argumentum bitáris AND és az argumentum unary komplementerén keresztül kell kiszámítani a bit bit használata nélkül. Az oktális jelölések a következők:

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

Akkor kiszámíthatod az umask megfelelő premisszumok beállítását:

$ 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

A fájlok végleges engedélyezésének kiszámítása

Egyszerűen leválaszthatja az umask-ot az alapengedélyekről a fájl végleges engedélyének meghatározásához az alábbiak szerint:

666 – 022 = 644
  • Fájlbázis-jogosultságok:666
  • umask érték:022
  • levonja az új fájlok engedélyezését(666-022):644 (rw-r–r–)

A végleges engedélyek kiszolgálása a könyvtárakhoz

Egyszerűen kivonhatja az umask-ot a bázisengedélyekből a könyvtár végső engedélyének meghatározásához a következőképpen:

777 – 022 = 755
  • A könyvtár alapjogjai:777
  • umask érték:022
  • Kivonja az új könyvtár engedélyezését(777-022):755 (rwxr-xr-x)
válasz adott amrx 06.04.2016 10:27
forrás
25

Mások válaszoltak igazán jól megértették az umasking fogalmát, és miért van szükség. Engedjék hozzá a két centemet, és adj matematikai példát arra, hogyan számolják ki a jogosultságokat.

Először is, a "maszk" nem jelenti a "kivonást", a számtani értelemben - nincs hitelfelvétel vagy bevonás, másrészt aumask maszk; nem számot kell levonni.

Harmadszor, a maszk kikapcsolja az engedélyezési biteket. Ha már ki van kapcsolva, aumask nem módosítja az engedélyt,

Tegyük fel például, hogy a077 -ot a666 és a777 könyvtárakból álló rendszer alapértelmezett értékeit ki kell meríteni.

A használni kívánt parancs

umask 077

(letörölje a bináris értéket,000 111 111)

Ez a megszüntetés az első hat LSB-t (a legkevésbé fontos biteket) kikapcsolja, ha1, és nem fog változni, ha valamelyikük már ki van kapcsolva.

Így számítható ki a végső engedély:

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

Figyeld meg, hogy a110 értékek hogyan változtak a000 -ra.

Hasonlóképpen,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
    
válasz adott Sufiyan Ghori 05.06.2016 16:09
forrás
9

Alapvető koncepció:

Ha olyanok vagyunk, mint a legtöbb ember, és nem értjük, hogy mi a csekély "oktális umaszkok kiszámítása az bit és az argumentum univerzális komplementere által a bitwise NOT" kifejezéssel, itt az egyszerű magyarázatom :

Először is gondoljon arra, mi a "maszk". A maszk blokkol valamit. Gondolj a szalag maszkolására. Ebben az esetben az umask olyan, mint a maszkoló szalag az engedélyek letiltásához / letiltásához új fájl vagy dir létrehozásakor.

Az alapértelmezett engedélyek az új dir létrehozásakoroctal 777 (111 111 111), és egy új fájloctal 666 (110 110 110). Az umask bizonyos engedélyek blokkolását / letiltását állította be.

  • A1 maszk bitje az engedély engedélyezését / letiltását jelenti (a maszkoló szalagot az adott bit fölé kell tenni).
  • A (z)0 maszkos bit engedélyezi az átjutást (nincs maszkoló szalag az adott bit fölött).

Tehát aoctal 022 (000 010 010) maszk agroup write és aothers write letiltását jelenti, és engedélyezi az összes többi engedély átjutását.

Számítás:

Itt egy példa egy új fájlra (alapértelmezett 666 engedély) egy 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)

Tehát ez a megoldás a 644-es eredményre vezet, amikor létrehoz egy új fájlt.

Könnyebb mód:

De ha az inverz maszk számítások csak összezavarják Önt, egyszerűbb mód van a szimbolikus umask jelölésre. Ha ezt a módszert használja, akkor csak a maszk bitek helyett adja meg az átmenő biteket.

  • umask u=rwx,g=rx,o=rx azt jelenti, hogy engedélyezd auser rwx,group rx,other rx értéket. Ami azt jelenti, hogy letiltjagroup w,others w. Ha ezt a parancsot futtatja, akkor ellenőrizze aumask -ot, kapsz022 -ot.
  • umask u=rwx,g=,o= azt jelenti, hogy engedélyezze auser rwx értéket. Ami azt jelenti, hogy letiltja az összes hozzáférést agroup és aothers számára. Ha ezt a parancsot futtatja, akkor ellenőrizze aumask -ot, kapsz077 -ot.

Bónuszszámítás:

Ha valójában azt szeretnénk megérteni, hogy az oktális umaszkok az bit és az argumentum univerzális komplementerének bitwise-e alapján számít-e ki a bit "NOT" kifejezéssel, itt vannak olyan logikai táblák, amelyek segíthetnek bemutatni. Ne felejtsük el, hogy a maszk bit1 jelentése letiltja, a0 azt jelenti, hogy átmegy.

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)

Ha táblázatot csinál aNOT(mask) -kal, akkor ez csak egy egyszerűAND logikai táblázat!

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)

Tehát a képlet a következő:result = perm AND (NOT mask)

    
válasz adott wisbucky 04.04.2017 00:30
forrás