umask – Maska użytkownika (ang. user mask)

Polecenie umask jest odpowiedzialne za ograniczenie praw dostępu (chmod). W jaki sposób to działa? A więc na początku zastanówmy się nad jedną rzeczą, a mianowicie podczas tworzenia pliku (katalogu) nadawane są jakieś uprawnienia dla tego pliku (katalogu). No dobrze, to jakie są te uprawnienia? Tutaj właśnie wchodzi rola polecenia umask. Standardowo w systemie Linux uprawnienia dla tworzonego pliku są rw-rw-rw- (ósemkowo 666) jeśli maska jest wyłączona. Z kolei jeśli tworzymy katalog i maska również jest wyłączona, to katalog posiadać będzie uprawnienia rwxrwxrwx (ósemkowo 777). Sprawdzenie wartości maski realizuje się używając polecenia umask, bez dodatkowych argumentów (rysunek 1). Wartość maski standardowo jest ustawiona na 022 (co to znaczy dowiesz się w dalszej części).

Polecenie umask
Rys 1. Wartość maski

 

Aby ustawić inną wartość maski po nazwie polecenia dodajemy wartość ósemkową bez lub z poprzedzającym zerem (ma to związek oczywiście z prawami dostępu). Poniższy rysunek prezentuje jak wyzerować maskę. Ogólnie jeśli wyświetlamy wartość maski to dostajemy jedno dodatkowe zero na początku, które oznacza, że wartość jest zapisana w systemie ósemkowym.

Polecenie umask
Rys 2. Ustawienie wartości maski

 

Jeśli nie zmieniałeś wartości maski i załóżmy, że jest ona równa 022 to podczas tworzenia pliku dostaniesz uprawnienia inne, a mianowicie rw-r–r– (rysunek 3). Dlaczego się tak dzieje? Odpowiedź znajdziesz poniżej.

Polecenie umask
Rys 3. Tworzenie pliku i sprawdzenie praw dostępu

 

Dzieje się tak ponieważ przyznawane uprawnienia przechodzą logiczną koniunkcję z zanegowaną wartością maski. Bramka AND (logiczna koniunkcja) przedstawiona została na rysunku 4. Rozłóżmy naszą ósemkową liczbę praw dostępu przyznawaną podczas tworzenie pliku przez system dla zerowej maski (rw-rw-rw-). Pamiętamy o tym, że każda z tych części jest traktowana osobno, dlatego też 666 rozkładamy na 110 110 110 (Liczba 666 binarnie była by inną liczbą). Następnie każdą z 9 cyfr zapisujemy jako X1 bramki AND, a jako X2 zanegowaną wartość maski (rys. 5) – oczywiście na odpowiadającej jej pozycji (rys. 6).

Polecenie umask
Rys 4. Logiczna bramka AND

 

Polecenie umask
Rys 5. Wartości używane do tworzenia maski binarnie i zanegowana wartość

 

Jeśli nasza maska równa się 022 (tutaj tak samo jak w przypadku praw, każda z części traktowana jest osobno) to po rozłożeniu jej i zapisaniu binarnie będzie się równać 000 010 010, a po negacji 111 101 101, dlatego też ostateczne prawo dostępu do pliku, które otrzymamy będzie rw-r–r–, co zostało udowodnione na poniższym rysunku.

Polecenie umask
Rys 6. Zastosowanie maski

 

Analogicznie dzieje się dla różnych wartości masek. Maska, za pomocą której odbierzemy wszystkie prawa podczas tworzenia pliku to 777. Warto sobie przeanalizować dlaczego. To samo jest w przypadku katalogów, z tą różnicą, że katalog podczas tworzenia dostaje prawa dostępu 777 (rwxrwxrwx), dlatego też w przypadku maski 022 otrzyma uprawnienia rwxr-xr-x.

źródło: https://www.arturpyszczuk.pl/commands-umask.html