Ce este umask în Linux și cum îl folosiți?

Publicat: 2022-07-29
Laptop Linux afișează un prompt bash
fatmawati achmad zaenuri/Shutterstock.com

În Linux, toate directoarele și fișierele au permisiuni de acces. Puteți utiliza chmod pentru a seta drepturile de acces preferate pentru diferiți utilizatori. Dar ce decide permisiunile lor implicite ? Să vorbim despre umask .

Permisiuni de acces

Toate directoarele și fișierele au steaguri numite biți de mod care decid dacă pot fi citite, scrise sau executate. Executarea unui fișier înseamnă rularea lui ca un program sau un script. Pentru un director, trebuie să poți „executa” un director pe care să îl cd în el. În mod colectiv, setările modului de biți sunt numite permisiuni ale directorului sau fișierului.

Există trei seturi de permisiuni. Un set este pentru proprietarul directorului sau al fișierului. Cu excepția cazului în care proprietatea a fost schimbată cu chown , proprietarul este persoana care a creat directorul sau fișierul.

Cum funcționează permisiunile pentru fișiere Linux?
LEGATE Cum funcționează permisiunile pentru fișiere Linux?

Al doilea set de permisiuni este pentru membrii grupului de utilizatori căruia directorul sau fișierul a fost alocat. De obicei, acesta este grupul de utilizatori al proprietarului.

Există un al treilea și ultimul set de permisiuni pentru „alții”. Este un captivant pentru toată lumea care nu este cuprinsă în primele două seturi.

Separând astfel permisiunile, pot fi acordate capacități diferite celor trei categorii. Acesta este modul în care accesul la directoare și fișiere este controlat în Linux. Deși este o schemă simplă, oferă o modalitate flexibilă și robustă de a dicta cine poate face ce cu orice director sau fișier.

Biții de mod

Puteți vedea permisiunile pentru fișiere folosind comanda ls și opțiunea -l (format lung).

 sunt -l orice*

De asemenea, ne vom uita la un director adăugând opțiunea -d (director). Fără această opțiune, ls s-ar uita la fișierele din director, nu la directorul în sine.

 ls -ld 

Folosind ls pentru a vedea permisiunile pentru directoare și fișiere

La începutul fiecărei intrări din lista ls , există o colecție de 10 caractere. Iată un prim plan al acelor caractere pentru un fișier și pentru un director.

Permisiunile unui fișier și director, aproape

Fișierul este linia de sus, directorul este linia de jos. Primul caracter ne spune dacă ne uităm la un director sau la un fișier. Un „d” indică un director și o liniuță „ - ” indică un fișier.

Cele trei seturi de permisiuni sunt indicate de fiecare grup de trei caractere. De la stânga la dreapta, acestea sunt permisiunile pentru proprietar, grup și altele. În fiecare set de permisiuni, cele trei caractere, de la stânga la dreapta, indică setarea pentru permisiunea de citire „r”, permisiunea de scriere „w” și permisiunea de executare „x”. O scrisoare înseamnă că permisiunea este setată. O liniuță „ - ” înseamnă că permisiunea nu este setată.

Pentru fișierul nostru exemplu, cele 10 caractere înseamnă:

  • : Acesta este un fișier, nu un director.
  • rwx : proprietarul poate citi, scrie și executa acest fișier.
  • rw- : Alți membri ai aceluiași grup căruia îi este atribuit acest fișier pot citi și scrie în fișier, dar nu îl pot executa.
  • r– : Toți ceilalți pot citi doar fișierul.

Pentru exemplul nostru de director, cele 10 caractere înseamnă:

  • d : Acesta este un director.
  • rwx : proprietarul poate citi, scrie și executa ( cd în) acest director.
  • rwx : Alți membri ai aceluiași grup pot citi, scrie și cd în acest director.
  • rx : Toți ceilalți pot cd în acest director, dar pot citi doar fișiere. Nu pot șterge fișiere, nu pot edita fișiere sau nu pot crea fișiere noi.

Permisiunile sunt stocate în biți de mod în metadatele directorului sau fișierului. Fiecare bit de mod are o valoare numerică. Toate au valoarea zero dacă nu sunt setate.

  • r : bitul citit are valoarea 4 dacă este setat.
  • w : bitul de scriere are valoarea 2 dacă este setat.
  • x : bitul de execuție are valoarea 1 dacă este setat.

Un set de trei permisiuni poate fi reprezentat de suma valorilor biților. Valoarea maximă este 4+2+1=7, ceea ce ar seta toate cele trei permisiuni dintr-un set la „pornit”. Aceasta înseamnă că toate permutările tuturor celor trei seturi pot fi capturate într-o valoare octală de trei cifre (bază 8).

Luând fișierul nostru exemplu de mai sus, proprietarul are permisiuni de citire, scriere și executare, care este 4+2+1=7. Alți membri ai grupului în care se află fișierul au permisiuni de citire și scriere, care este 4+2=6. Cealaltă categorie are doar setul de permisiuni de citire, care este pur și simplu 4.

Deci permisiunile pentru acel fișier pot fi exprimate ca 764.

Folosind aceeași schemă, permisiunile pentru director ar fi 775. Puteți vedea reprezentarea octală a permisiunilor folosind comanda stat .

Cum să utilizați comanda chmod pe Linux
LEGATE Cum să utilizați comanda chmod pe Linux

Comanda chmod ( ch ange mod e bits) este instrumentul folosit pentru a seta permisiunile pentru directoare și fișiere. Dar nu dictează ce permisiuni sunt setate pentru un director sau fișier atunci când îl creați. Pentru aceasta este folosit un set implicit de permisiuni.

Permisiunile implicite și umask

Permisiunile implicite pentru un director sunt 777, iar permisiunile implicite pentru un fișier sunt 666. Acest lucru oferă fiecărui utilizator acces deplin la toate directoarele și capacitatea de a citi și scrie orice fișier. Bitul de execuție nu este setat pe fișiere. Nu puteți crea un fișier care are deja setat bitul de execuție. Acest lucru ar putea duce la riscuri de securitate.

Cum să utilizați comanda stat pe Linux
LEGATE Cum să utilizați comanda stat pe Linux

Cu toate acestea, dacă creați un director nou și un fișier nou și vă uitați la permisiunile acestora, acestea nu vor fi setate la 777 și 666. Vom crea un fișier și un director, apoi vom folosi stat pipered prin grep pentru a extrage linia cu reprezentarea octală a permisiunilor lor.

 atingeți umask-article.txt
 mkdir howtogeek
 stat umask-article.txt | grep "Acces: ("
 stat howtogeek | grep "Acces: (" 

permisiunile implicite pentru un director și fișier și rezultatul statistic pentru fiecare dintre ele

Sunt setate la 775 pentru director și 664 pentru fișier. Nu sunt setate la permisiunile globale implicite, deoarece o altă valoare le modifică, numită valoare umask.

Valoarea umask

Valoarea umask este setată global cu o valoare pentru root și alta pentru toți ceilalți utilizatori. Dar poate fi setat la o nouă valoare pentru oricine. Pentru a vedea care este setarea curentă umask, utilizați comanda umask .

 umask 

Valoarea umask pentru un utilizator obișnuit

Și pentru rădăcină:

 umask 

Valoarea umask pentru utilizatorul root

Permisiunile pentru un director sau fișier nou creat sunt rezultatul modificării valorii umask a permisiunilor globale implicite.

La fel ca biții de mod, valoarea umask reprezintă aceleași trei seturi de permisiuni - proprietar, grup și altele - și le reprezintă ca trei cifre octale. Uneori le veți vedea scrise ca patru cifre, prima cifră fiind zero. Acesta este un mod scurt de a spune „acesta este un număr octal”. Sunt cele trei cifre din dreapta care contează.

Valoarea umask nu poate adăuga permisiuni. Poate doar să elimine sau să mascheze permisiunile. De aceea, permisiunile implicite sunt atât de liberale. Sunt proiectate pentru a fi reduse la niveluri sensibile prin aplicarea valorii umask.

Un set de permisiuni implicite nu se va potrivi tuturor utilizatorilor și nici nu se va potrivi tuturor scenariilor. De exemplu, directoarele și fișierele create de root vor avea nevoie de permisiuni mai restrictive decât utilizatorul obișnuit. Și chiar și un utilizator obișnuit nu dorește ca toată lumea din categoria celorlalți să poată vedea și modifica fișierele.

Cum umask maschează permisiunile

Scăderea valorii măștii din permisiunile implicite vă oferă permisiunile reale. Cu alte cuvinte, dacă o permisiune este setată în valoarea umask, aceasta nu va fi setată în permisiunile aplicate directorului sau fișierului.

Valorile umask funcționează ca o inversă față de valorile obișnuite ale permisiunii.

  • 0 : Nu sunt eliminate permisiuni.
  • 1 : bitul de execuție este nesetat în permisiuni.
  • 2 : bitul de scriere este nesetat în permisiuni.
  • 4 : bitul de citire este nesetat în permisiuni.

Permisiunile implicite de 777 pentru directoare și 666 pentru fișiere au fost modificate de valoarea umask de 002 pentru a obține eventualele permisiuni de 775 și 664 pentru directorul și fișierul nostru de testare.

 stat umask-article.txt | grep "Acces: ("
 stat howtogeek | grep "Acces: (" 

Eventualele permisiuni asupra unui director și fișier

Acest lucru elimină permisiunea de scriere din categoria celelalte atât în ​​director, cât și în fișier.

dacă root creează un director, se aplică valoarea lor umask de 022. Permisiunea de scriere este eliminată pentru categoria celelalte și pentru categoria grup.

 sudo mkdir root-dir
 stat howtogeek | grep "Acces: (" 

Permisiunea când root creează un director

Putem vedea că permisiunile implicite de 777 au fost reduse la 755.

LEGATE: Cum să auditați securitatea sistemului dvs. Linux cu Lynis

Modificarea valorii umask implicite

Există diferite valori umask pentru shell-urile de conectare și shell-urile non-login. Shell-urile de conectare sunt shell-urile care vă permit să vă conectați, fie local, fie de la distanță prin SSH. Un shell non-login este un shell în interiorul unei ferestre de terminal atunci când sunteți deja autentificat.

Fiți foarte atenți dacă schimbați shell-ul de conectare umask. Nu măriți permisiunile și reduceți securitatea. În orice caz, ar trebui să fiți înclinați să le reduceți și să le faceți mai restrictive.

Pe Ubuntu și Manjaro, setările umask pot fi găsite în aceste fișiere:

  • Login Shell umask : Pentru valoarea umask implicită a shell-ului de autentificare: /etc/profile
  • Shell non-login: pentru valoarea umask implicită pentru shell non-login: /etc/bash.bashrc

Pe Fedora, setările umask pot fi găsite în aceste fișiere:

  • Login Shell umask : Pentru valoarea umask implicită a shell-ului de conectare: /etc/profile
  • Shell non-login: pentru valoarea umask implicită pentru shell non-login: /etc/bashrc

Dacă nu aveți o nevoie presantă de a le schimba, cel mai bine este să le lăsați în pace.

Modul preferat este să setați o nouă valoare umask pentru orice cont de utilizator individual care trebuie să difere de valoarea implicită. O nouă setare umask poate fi introdusă în fișierul „.bashrc” al unui utilizator din directorul de acasă.

 gedit .bashrc 

Deschiderea fișierului .bashrc într-un editor

Adăugați setarea Umask în partea de sus a fișierului.

Adăugarea valorii umask la fișierul .bashrc

Salvați fișierul și închideți editorul. deschideți o nouă fereastră de terminal și verificați valoarea umask cu comanda umask .

 umask 

Se verifică noua valoare umask

Noua valoare este activă.

LEGATE: Cum să vă conectați la un server SSH din Windows, macOS sau Linux

Modificări pe termen scurt la umask

Dacă aveți o cerință pe termen scurt pentru o valoare umask diferită, o puteți modifica pentru sesiunea curentă folosind comanda umask . Poate că veți crea un arbore de directoare și câteva fișiere și doriți să aveți o securitate sporită asupra lor.

Puteți seta valoarea umask la 077, apoi verificați că noua valoare este activă.

 umask 077
 umask 

Setarea unei valori umask temporare

Setarea măștii să aibă o valoare de 7 în grup și alte categorii înseamnă că toate permisiunile sunt eliminate din acele categorii. Nimeni în afară de tine (și root) nu va putea să intre în noile directoare și să citească și să editeze fișierele.

 mkdir secure-dir
 ls -ld secure-dir 

Crearea unui director nou într-o sesiune cu o valoare umask temporară

Singurele permisiuni sunt pentru proprietarul directorului.

 mkdir secure-file.txt
 ls -ld secure-file.txt 

Crearea unui fișier nou într-o sesiune cu o valoare umask temporară

Fișierul este securizat împotriva snooping-ului de la alți utilizatori. Închiderea ferestrei terminalului anulează setarea temporară umask.

Alte moduri în care este folosit umask

Linux permite unor procese să moștenească valorile umask de sistem sau să li se dea propriile setări umask. De exemplu, useradd folosește o setare umask pentru a crea directoare de acasă ale utilizatorilor noi.

O valoare umask poate fi aplicată și unui sistem de fișiere.

 mai puțin /etc/fstab 

Privind fișierul /etc/fstab cu mai puțin

Pe acest computer, sistemul de fișiere „/boot/efi” are aplicată o setare umask de 077.

Setarea umask din fișierul /etc/fstab

Privind punctul de montare a sistemului de fișiere cu ls , putem verifica că valoarea umask a eliminat toate permisiunile tuturor, cu excepția proprietarului, root.

 ls /boot/efi -ld 

Folosind ls pentru a vedea permisiunile pe punctul de montare a sistemului de fișiere „/boot./efi”.

umask și permisiunile au nevoie reciproc

Permisiunile implicite sunt aplicate unui director sau fișier după ce au fost transformate de valoarea umask. Va fi foarte rar să fie nevoie să modificați permanent valoarea umask pentru un utilizator, dar setarea temporară a valorii umask pentru a oferi un set mai strict de permisiuni în timp ce creați o colecție de directoare sau documente sensibile este o modalitate rapidă și ușoară de a le consolida. Securitate.

LEGATE: Cum să vă securizați serverul Linux cu un firewall UFW