Vraag Wat is "umask" en hoe werkt het?


Ik geloof dat umask iets is dat de controle heeft bestandsrechten, maar begrijp het niet volledig.

Na het rennen umask 0644 in een terminal, Ik kan de bestanden die ik maak niet lezen met de opdrachtregeleditor nano. Ik heb gemerkt dat de rechten van dat bestand zijn ingesteld op 0022 in plaats van de standaard 0755.

Hoe werkt umask? Ik dacht dat ik het elk cijfer in de umask kon verwijderen 0777, 7 - 6 = 1 en 7 - 4 = 3, dus ik verwacht dat de toestemmingen zijn 0133, maar blijkbaar is dit niet het geval.

  1. Wat is umask precies? Leg het aan mij uit alsof ik een "Linux noob" was
  2. Hoe bereken ik met umask?
  3. Wat zijn use cases voor umask?

159
2018-05-22 20:42


oorsprong


app_mode 666 rw- rw- rw-  umask 644 --0 -00 -00  file_mode 022 --- -w- -w- - grabantot


antwoorden:


De umask fungeert als een set machtigingen die toepassingen niet op bestanden kunnen instellen. Het is een creatie masker voor de bestandsmodus processen en kan niet worden ingesteld voor mappen zelf. De meeste applicaties zouden geen bestanden maken met uitvoeringsrechten ingesteld, dus zouden ze een standaard hebben van 666, die vervolgens wordt aangepast door de umask.

Zoals u de umask hebt ingesteld om de lees- / schrijfbits voor de eigenaar en de leesbits voor anderen te verwijderen, een standaard zoals 777 in toepassingen zou resulteren in de bestandsrechten 133. Dit zou betekenen dat u (en anderen) het bestand kunt uitvoeren en dat anderen het kunnen schrijven.

Als je wilt dat bestanden niet door iedereen behalve de eigenaar worden gelezen / geschreven / uitgevoerd, moet je een umask-achtige gebruiken 077 om die toestemmingen voor de groep en anderen uit te schakelen.

In tegenstelling, een umask van 000 zal nieuwe mappen voor iedereen leesbaar, beschrijfbaar en afleesbaar maken (de rechten zullen zijn 777). Zo'n umask is zeer onveilig en je zou nooit de umask moeten instellen 000.

De standaard umask op Ubuntu is 022 wat betekent dat nieuw gecreëerde bestanden door iedereen kunnen worden gelezen, maar alleen door de eigenaar kunnen worden geschreven:

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

Umask bekijken en wijzigen

Om uw huidige umask-instelling te bekijken, open een terminal en voer de opdracht uit:

umask

Als u de umask-instelling van de huidige shell wilt wijzigen in iets anders, bijvoorbeeld 077, voert u het volgende uit:

umask 077

Als u wilt testen of deze instelling werkt of niet, kunt u een nieuwe bestand (bestandsrechten van een bestaand bestand worden niet beïnvloed) en informatie weergeven over het bestand, uitvoeren:

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

De umask-instelling wordt overgenomen door processen die vanuit dezelfde shell zijn gestart. Start bijvoorbeeld de teksteditor GEdit door te executeren gedit in de terminal en sla een bestand op met gedit. U zult merken dat het nieuwe bestand wordt beïnvloed door dezelfde umask-instelling als in de terminal.

Use case: multi-user systeem

Als u zich op een systeem bevindt dat door meerdere gebruikers wordt gedeeld, is het gewenst dat anderen geen bestanden in uw basismap kunnen lezen. Daarvoor is een umask erg handig. Bewerk ~/.profile en voeg een nieuwe regel toe met:

umask 007

U moet opnieuw inloggen voor deze umask-wijziging in ~/.profile effect hebben. Vervolgens moet je de bestaande bestandsrechten van bestanden in je thuismap wijzigen door het lees-, schrijf- en uitvoerbit voor de wereld te verwijderen. Open een terminal en voer uit:

chmod -R o-rwx ~

Als u wilt dat deze umask-instelling wordt toegepast op alle gebruikers op het systeem, kunt u het systeembrede profielbestand bewerken op /etc/profile.


125
2018-05-22 20:59



Wat betekenen de cijfers in de umask dus? Waarom doet 777 betekent dat de groep en anderen in staat zullen zijn om het te schrijven, terwijl 077 betekent dat ze dat niet kunnen? - HelloGoodbye
Ook zeg je dat als de umask is 000, de bestandsmachtiging zal zijn 777. Dus met een standaardmasker van 022, zouden de bestandsrechten niet mogen zijn 755, d.i. overeenkomend met -rwxr-xr-x, niet -rw-r--r--? - HelloGoodbye
Ik moet toegeven dat deze uitleg me meer verwarde dan dat het me hielp. - Connel Hooley
Notitie dat Ubuntu's standaard umask veranderd naar 0002 slechts een maand nadat dit antwoord werd geplaatst. - Jeff Puckett
@HelloGoodbye als de umask is 000 dan worden geen rechten verwijderd. toepassingen zoals touch en nano maak bestanden met standaard 666 dus de bestandsrechten blijven behouden 666 maar een umask van 022 zal de schrijfbits voor de groep en anderen verwijderen, dus 666 wordt gereduceerd tot 644 aka -rw-r--r-- Overwegen mkdir welke standaard creëringsmodus van 777 met een umask van 022 verlaagt de machtigingen voor 755 - Jeff Puckett


Naast de goede discussie in het geaccepteerde antwoord, is het de moeite waard daar wat meer punten aan toe te voegen umask, met verwijzing naar hoe het wordt beheerd in 12.04 en later.

Umask en pam_umask

De standaard umask is nu in /etc/login.defs en niet in /etc/profile, zoals de officiële notitie in /etc/profile luidt als volgt:

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

Pam_umask wordt hieronder kort uitgelegd en het moet gezegd worden dat het standaardbestand voor de gebruiker om zijn aangepaste umask-instelling in te plaatsen nog steeds is ~/.profile.

Pam_umask is een van de vele belangrijke PAM-modules die cruciaal zijn in de werking van Ubuntu (uitvoeren apropos '^pam_' om de manpages voor de andere te vinden). In de manpage voor pam_umask het is opgevallen dat

pam_umask is een PAM-module om het make-upmasker voor de bestandsmodus van de huidige omgeving in te stellen. De umask beïnvloedt de          standaardrechten toegewezen aan nieuw gemaakte bestanden.

Een opmerking over het standaard umask

Nieuwe mappen in $HOME kan worden gemaakt door mkdir met standaard 775-machtigingen en bestanden gemaakt met touch met standaard 664-machtigingen, zelfs als het standaard umask 022 is. Dit lijkt in eerste instantie tegenstrijdig en het is de moeite waard om het uit te leggen.

Hoewel de standaard umask 022 is op Ubuntu, is dit niet het hele verhaal, omdat er een instelling in zit /etc/login.defs waarmee het umask 002 kan zijn voor niet-rootgebruikers als aan een voorwaarde is voldaan (zie fragment hieronder). Op een normale installatie, /etc/login.defs bevat de instelling USERGROUPS_ENAB yes. Dit is wat

Hiermee wordt het instellen van de umask-groepsbits gelijk aan eigenaarsbits    (voorbeelden: 022 -> 002, 077 -> 007) voor niet-rootgebruikers, als de uid dit is    hetzelfde als gid, en gebruikersnaam is hetzelfde als de primaire groepsnaam.

Vandaar waarom je het volgende ziet met stat wanneer een nieuwe map wordt gemaakt met mkdir op een enkel gebruikerssysteem zoals het mijne (uid en gid zijn hetzelfde):

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

Zie voor meer informatie man pam_umask en de Ubuntu manpages online.


34
2018-04-02 00:16



Het lijkt erop dat je tweede onderdeel iets mist? (USERGROUP_ENABLE?) +1 voor bijgewerkte informatie - Lekensteyn
@Lekensteyn Vreemd genoeg is de instelling binnen /etc/login.defs is zeker USERGROUPS_ENAB yes na het te hebben gecontroleerd. De syntaxis van dat bestand is enigszins ongewoon.
Ik heb net het bestand en de bron gecontroleerd en je hebt gelijk, deze (en sommige andere) instellingen hebben verwarrend de naam "_ENAB". - Lekensteyn


Dit is behoorlijk oud, maar dit is het vermelden waard. Berekenen voor de umask, in tegenstelling tot bestandssysteemrechten. De octale umasks worden berekend via het bitwise EN van het unaire complement van het argument met behulp van bitwise NOT. De octale notaties zijn als volgt:

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

Dan kunt u berekenen om umask juiste premies in te stellen, zoals:

$ 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

Berekening van de uiteindelijke toestemming voor bestanden

U kunt eenvoudig de umask aftrekken van de basisrechten om de uiteindelijke toestemming voor het bestand als volgt te bepalen:

666 – 022 = 644
  • Bestandsbasisrechten: 666
  • umask-waarde: 022
  • aftrekken om machtigingen te krijgen voor een nieuw bestand (666-022) : 644 (rw-r–r–)

De uiteindelijke toestemming voor mappen berekenen

U kunt eenvoudig de umask aftrekken van de basisrechten om de uiteindelijke machtiging voor de map als volgt te bepalen:

777 – 022 = 755
  • Directory basisrechten: 777
  • umask-waarde: 022
  • Trek af om toegang te krijgen tot de nieuwe map (777-022) : 755 (rwxr-xr-x)

29
2018-04-06 08:27



Ik denk niet dat dat de manier is waarop de uiteindelijke permissons worden berekend, wat als de waarde van het ontmaskeren is 077 hoe zou je aftrekken 666-077 in dat geval ? - Sufiyan Ghori
@SufiyanGhori De uitleg van Baron is niet volledig voor bestandsrechten. In jouw geval en in elke toekomstige berekening, om het gemakkelijk te onthouden, moet je eraan denken ze op deze manier af te trekken: 6-0 6-7 6-7 als het resultaat van die drie -1 is, laat het dan 0. Dus we hebben eindresultaat 600 - Huy.PhamNhu
@ Huy.PhamNhu Dat is ook niet correct. Met basistoestemming van 666 en umask van 033 haal je zeker geen 633 uit. - maaartinus
Nee nee nee. U kunt aftrekken niet gebruiken om umask te berekenen (het werkt met bepaalde waarden, maar niet alle). Je moet de umask zien als "disable bits". Zie de andere antwoorden van Sufiyan en Wisbucky. - wisbucky


Anderen hebben het concept van umasking heel goed uitgelegd en waarom is het vereist. Ik zal mijn twee cent toevoegen en u een wiskundig voorbeeld geven over hoe de machtigingen daadwerkelijk worden berekend.

Allereerst betekent "masker" niet "aftrekken", in de rekenkundige zin - er is geen leen of carry bij betrokken, ten tweede umask is een masker; het is geen getal dat moet worden afgetrokken.

Ten derde zet het masker machtigingsbits uit. Als ze al uit zijn, is de umask maakt geen verandering in de toestemming,

Neem bijvoorbeeld aan dat je moet ontmaskeren 077 van de systeemstandaard voor bestanden die dat is 666 en mappen die is 777.

Het commando dat je gaat gebruiken,

umask 077

(waarde ontmaskeren in binair, 000 111 111)

Wat dit ontmaskeren zal doen is het zal een van de eerste zes LSB's (minst significante bits) uitschakelen als ze dat zijn 1 en zal niets veranderen als een van hen al uit is.

Hier is hoe de definitieve toestemming wordt berekend:

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

Observeer hoe beide 110 waarden zijn veranderd in 000.

Evenzo

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

24
2018-06-05 14:09



dit zou het antwoord moeten zijn! - Abdelouahab
@SufiyanGhori Dus als umask 177 (001 111 111), worden eerst 7 minst significante bits uitgeschakeld als ze dat wel zijn 1 - Kasun Siyambalapitiya
dat is correct @KasunSiyambalapitiya - Sufiyan Ghori


Basis concept:

Als je net als de meeste mensen bent en niet begrijpt wat in godsnaam "octale umasks worden berekend via het bitwise EN van het unaire complement van het argument met bitwise NOT" betekent, hier is mijn eenvoudige uitleg:

Denk allereerst na over wat een "masker" is. Een masker blokkeert iets. Denk aan plakband. In dit geval is umask als maskeringstape om machtigingen te blokkeren / deactiveren bij het maken van een nieuw bestand of map.

De standaardrechten voor het maken van een nieuwe map is octal 777 (111 111 111), en een nieuw bestand is octal 666 (110 110 110). We hebben de umask ingesteld om bepaalde machtigingen te blokkeren / uitschakelen.

  • Een masker beetje van 1 betekent om die toestemming te blokkeren / uit te schakelen (plakband over dat bit te plaatsen).
  • Een masker beetje van 0 zal toestemming geven om te passeren (geen maskeringstape over dat bit).

Dus een octal 022 (000 010 010) masker betekent uitschakelen group write en others writeen laat alle andere machtigingen door.

Berekening:

Hier is een voorbeeldberekening voor een nieuw bestand (standaard 666 toestemming) met een 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)

Dus dat is hoe je eindigt met het resultaat van 644 wanneer je een nieuw bestand aanmaakt.

Gemakkelijker manier:

Maar als inverse maskerberekeningen u gewoon in verwarring brengen, is er een eenvoudigere manier om symbolische umask-notatie te gebruiken. Wanneer u deze methode gebruikt, geeft u alleen de pass-throughbits op in plaats van de maskerbits.

  • umask u=rwx,g=rx,o=rx middelen laten passeren voor user rwx, group rx, other rx. Wat betekent uitschakelen group w, others w. Als u deze opdracht uitvoert, controleer dan umask, je zult krijgen 022.
  • umask u=rwx,g=,o= middelen laten passeren voor user rwx. Wat impliceert alle toegang voor onbruikbaar maken group en others. Als u deze opdracht uitvoert, controleer dan umask, je zult krijgen 077.

Bonus berekening:

Als je echt wilt weten wat "octale umasks worden berekend via het bitwise EN van het unaire complement van het argument met bitwise NOT" betekent, hier zijn enkele logische tabellen die kunnen helpen demonstreren. Vergeet niet, een masker beetje 1 betekent uitschakelen, 0 betekent passeren.

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)

Als je de tafel maakt NOT(mask), nu is het gewoon een simpel AND logische tabel!

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)

Dus de formule hiervoor is: result = perm AND (NOT mask)


9
2018-04-03 22:30