Wat is umask in Linux?

UMASK staat in Linux of Unix systemen bekend als Gebruikersmasker of het wordt ook wel Gebruikersmasker voor het aanmaken van bestanden genoemd. Dit is een basistoestemming of standaardtoestemming wanneer in de Linux machine een nieuw bestand of een nieuwe map wordt aangemaakt.

Het wordt gebruikt door meerdere commando’s in Linux zoals mkdir, touch, tee, en andere commando’s die bestanden en mappen aanmaken. Het wordt bij elke stap betrokken wanneer een nieuw bestand of een nieuwe map wordt aangemaakt.

Bestandsmachtigingen:

Voor we verder gaan met diep duiken en umask begrijpen, begrijpen we eerst bestandspermissies in het kort.

Linux staat bekend om zijn veiligheid. Elk bestand of elke directory in Linux heeft een specifieke set permissies en eigendomsrechten. Laten we eens kijken naar de gebruikersklasse hieronder.

Aan elk bestand in Linux zijn onderstaande drie gebruikersklassen verbonden.

  1. Gebruiker – Een gebruiker die eigenaar is van het bestand – Standaard geeft dit aan wie het bestand maakte, tenzij je het verandert.
  2. Groep – Dit geeft aan aan de mensen in de groep rechten op het bestand worden toegekend.
  3. Andere – Dit beperkt de andere gebruikers die niet de eigenaar zijn of in de toegewezen groep zitten.

Er zijn drie soorten bestandstoegang voor elke hierboven genoemde gebruikersklasse.

  1. r – lees permissie – de mogelijkheid om de inhoud van het bestand te lezen
  2. w – schrijf permissie – de mogelijkheid om de inhoud van het bestand te wijzigen
  3. x – toestemming uitvoeren – de mogelijkheid om het bestand als een programma uit te voeren

Het bovenstaande begrip vertelt je wie de inhoud van het bestand mag lezen, de inhoud van het bestand mag wijzigen of het programma mag uitvoeren.

Toestemmingen bekijken – Symbolische modus:

Laten we eens kijken naar onderstaand bestandseigendom. Je kunt de informatie op je Linux machine ophalen door het commando ls -l te typen.

Linux Umask uitgelegd

Het eerste teken in de bovenstaande afbeelding geeft het bestandstype aan. Er kunnen verschillende soorten bestanden zijn in Linux zoals hieronder.

duidt op het eenvoudige gewone bestand met verschillende extensies als .txt, .json, .sh, .py, .rb, enzovoort

d

Geeft map/map aan

l

Geeft een symbolische link of symlink of soft link aan

c

Geeft tekenapparaatbestand aan

b

Geeft blok-apparatenbestand aan

De volgende negen symbolen zijn verdeeld in drie delen zoals hieronder.

rwx

De eigenaar van het bestand kan de inhoud lezen, wijzigen en het bestand als een programma uitvoeren

r-x

Leden van de groep “users” kunnen de inhoud lezen en het bestand als een programma uitvoeren, maar kunnen de inhoud van het bestand niet wijzigen

r-x

Degene die niet de eigenaar is ook geen lid van de groep m.a.w. other, kan ook de inhoud van het bestand lezen en het bestand als een programma uitvoeren maar de inhoud niet wijzigen

Rechten bekijken – Numerieke modus:

Er is een extra manier om toestemmingen met getallen weer te geven, die Numerieke Modus heet.

Laten we eens kijken naar de Numerieke bestandspermissietabel hieronder.

0

Geen toestemming

1

–x

Alleen toestemming voor uitvoeren

2

-w-

Alleen schrijf-toestemming

3

-wx

Toestemming voor schrijven en uitvoeren

4

r–

Alleen lees-toestemming

5

r-x

Toestemming lezen en uitvoeren

6

rw-

Lees en Schrijf toestemming

7

rwx

Lees, Schrijf en Voer toestemming uit

Als ik deze Numerieke toestemmingsgrafiek raadpleeg en toepas op dezelfde directory als in de bovenstaande afbeelding, dan zien de toestemmingen er uit als hieronder.

rwx

4+2+1

7

r-x

4+0+1

5

r-x

4+0+1

5

De numerieke toestemming van de map testdir is dus 755.

UMASK begrijpen:

Laten we een nieuw bestand en een nieuwe directory maken door het onderstaande commando uit te voeren.

$ touch testfile
$ mkdir testdir

Laten we de permissies van testfile en testdir bekijken door het ls -l commando uit te voeren.

$ ls -l

Output:
drwxr-xr-x  2 niteshb users    4096 Mar 21 22:43 testdir
-rw-r--r--  1 niteshb users       0 Mar 21 22:43 testfile

Heb je de permissies opgemerkt? Ze zijn verschillend, nietwaar? Dat komt door de standaard umask waarde die op de Linux machine is ingesteld.

Standaard is op de Linux machine de aanmaak-toestemming voor een bestand 666, wat lees- en schrijf-toestemming geeft aan de eigenaar, groep en anderen, en 777 voor een directory, wat lees-, schrijf- en uitvoer-toestemming betekent aan de eigenaar, groep en anderen.

Zoals we weten kunnen mappen niet uitvoerbaar zijn. Waarom hebben mappen dan een execute permissie nodig? Wel, de execute permissie aan de directory is om toegang te krijgen tot de inhoud onder de directory. Als we met chmod commando de toestemming van de directory in 666 veranderen en met cd commando proberen de directory binnen te gaan, krijg je de foutmelding permission denied.

Op de meeste Linux distributies is de standaard systeembrede waarde ingesteld in pam_umask.so of in /etc/profile bestand. Door de waarde in ~/.bashrc bestand in de thuismap van de gebruiker te zetten, kunnen we een umask waarde specifiek voor de gebruiker maken.

Om de umask waarde te controleren, voer je het commando umask uit.

$umask

Uitvoer:

0022

We kunnen de allereerste 0 van de bovenstaande vier getallen voorlopig negeren. Het is een onderdeel van geavanceerde toestemming in Linux. Die kan voorkomen dat je een bestand wijzigt zelfs als je schrijfrechten hebt of we kunnen voorkomen dat je een bestand verwijdert zelfs als je de root gebruiker bent. In dit blog gaan we ons alleen op de andere drie getallen concentreren.

Om de huidige sessie umask waarde te veranderen, voer je het onderstaande commando uit, gevolgd door de gewenste waarde.

$umask 0044

Hoe bestanden en mappen hun permissies krijgen:

De waarde die bij umask hoort is NIET de toestemming die je krijgt voor je bestanden en mappen.

Er is een heel eenvoudige berekening. Zoals we hierboven vermeldden is de standaardwaarde voor een bestand 666 en voor een directory 777. Om toestemmingsbits voor nieuwe bestanden of mappen te berekenen, trek je de umask waarde af van de standaard waarde.

Laten we bijvoorbeeld berekenen hoe een nieuwe toestemming voor een bestand of map door umask beïnvloed wordt.

  • Bestanden: 666 – 022 = 644. Volgens de toestemming kan de eigenaar het bestand lezen en uitvoeren. Groepen en anderen kunnen het bestand lezen.
  • Directory: 777 – 022 = 755. Dit betekent dat de eigenaar alle lees-, schrijf- en cd-toestemmingen voor de directory heeft. Groep en anderen kunnen de inhoud van de directory lezen en opnoemen, en cd naar de directory.

Je kunt de umask waarde ook in numerieke vorm bekijken door onderstaand commando uit te voeren.

$umask

Uitvoer:

u=rwx,g=rx,o=rx

In tegenstelling tot de numerieke notatie bevat de symbolische notatie waarde de toestemmingsbits die op de nieuw aangemaakte bestanden en mappen gezet zullen worden.

Instellen van de maskerwaarde:

Het masker voor het aanmaken van bestanden kan ingesteld worden met octale of symbolische notatie. Om de veranderingen permanent te maken stel je de nieuwe umask waarde in in een globaal configuratiebestand zoals /etc/profile dat alle gebruikers beïnvloedt, of in de shell configuratiebestanden van een gebruiker zoals ~/.profile, ~/.bashrc of ~/.zshrc die alleen de gebruiker beïnvloeden. De gebruikersbestanden hebben voorrang op de globale bestanden.

Alvorens de waarde umask te veranderen, moet je nagaan of de nieuwe waarde geen potentieel veiligheidsrisico inhoudt. Waarden die minder beperkend zijn dan 022 moeten met grote voorzichtigheid gebruikt worden. Bijvoorbeeld umask 000 betekent dat iedereen lees-, schrijf-, en uitvoerrechten krijgt voor alle nieuw aangemaakte bestanden.

Stel dat we voor de nieuw aangemaakte bestanden en directories restrictievere rechten willen instellen, zodat anderen niet naar cd naar de directories kunnen gaan en bestanden kunnen lezen. De permissies die we willen zijn 750 voor directories en 640 voor bestanden.

Om de umask waarde te berekenen trek je gewoon de gewenste permissies af van de standaard waarde:

Umask waarde: 777-750 = 027

De gewenste umask waarde, weergegeven in numerieke notatie, is 027.

Om de nieuwe waarde permanent systeembreed in te stellen open je het /etc/profile bestand met je teksteditor en verander of voeg je de volgende regel toe aan het begin van het bestand:

umask 0027

Om de veranderingen te laten inwerken voer je het volgende broncommando uit of log uit en log in:

$source /etc/profile

Om de nieuwe instellingen te controleren maken we met onderstaande commando’s één nieuw bestand en een nieuwe directory aan.

$mkdir newtestdir
$touch newtestfile

Als je de permissies controleert met het ls commando zul je zien dat het nieuwe bestand 640 en de nieuwe directory 750 permissies heeft, zoals we wilden:

drwxr-xr--  2 niteshb  users    4096 Mar 21 22:43 newtestdir
-rw-r-----  1 niteshb  users       0 Mar 21 22:43 newtestfile

Een andere manier om het masker voor het aanmaken van bestanden in te stellen is door de symbolische notatie te gebruiken. Bijvoorbeeld umask u=rwx,g=rx,o= is hetzelfde als umask 027.

Conclusie:

In deze gids hebben we de Linux permissies uitgelegd en hoe je het umask commando kunt gebruiken om de permissie bits in te stellen voor nieuw aangemaakte bestanden of mappen.

Voor meer informatie typ je onderstaand commando in je terminal.

$man umask