Comanda Chmod în Linux (permisiuni de fișiere)

author
10 minutes, 36 seconds Read

În Linux, accesul la fișiere este gestionat prin intermediul permisiunilor, atributelor și proprietății fișierelor. Acest lucru asigură că numai utilizatorii și procesele autorizate pot accesa fișiere și directoare.

Acest tutorial acoperă modul de utilizare a comenzii chmod pentru a modifica permisiunile de acces la fișiere și directoare.

Linux File Permissions #

Înainte de a merge mai departe, să explicăm modelul de bază al permisiunilor Linux.

În Linux, fiecare fișier este asociat cu un proprietar și un grup și i se atribuie drepturi de acces cu permisiuni pentru trei clase diferite de utilizatori:

  • Proprietarul fișierului.
  • Membrii grupului.
  • Alții (toți ceilalți).

Proprietatea fișierului poate fi schimbată cu ajutorul comenzilor chownși chgrp.

Există trei tipuri de permisiuni de fișier care se aplică fiecărei clase:

  • Permisiunea de citire.
  • Permisiunea de scriere.
  • Permisul de execuție.

Acest concept vă permite să specificați căror utilizatori li se permite să citească fișierul, să scrie în fișier sau să execute fișierul.

Permisiunile fișierelor pot fi vizualizate folosind comanda ls:

ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt|- | | | | | | || | | | | | +-----------> 7. Group| | | | | +-------------------> 6. Owner| | | | +--------------------------> 5. Alternate Access Method| | | +----------------------------> 4. Others Permissions| | +-------------------------------> 3. Group Permissions| +----------------------------------> 2. Owner Permissions+------------------------------------> 1. File Type

Primul caracter arată tipul de fișier. Acesta poate fi un fișier obișnuit (-), un director (d, o legătură simbolică(l) sau orice alt tip special de fișier.

Cele nouă caractere următoare reprezintă permisiunile fișierului, trei triplete de câte trei caractere fiecare. Primul triplet arată permisiunile proprietarului, al doilea permisiunile de grup, iar ultimul triplet arată permisiunile tuturor celorlalți. Permisiunile pot avea o semnificație diferită în funcție de tipul de fișier.

În exemplul de mai sus (rw-r--r--) înseamnă că proprietarul fișierului are permisiuni de citire și scriere (rw-), grupul și ceilalți au doar permisiuni de citire (r--).

Care dintre cele trei triplete de permisiuni poate fi construită din următoarele caractere și are efecte diferite, în funcție de faptul că sunt stabilite pentru un fișier sau pentru un director:

Efectul permisiunilor asupra fișierelor

Permisiune Caracter Semnificație asupra fișierului
Lectură - Fileul nu este lizibil. Nu puteți vizualiza conținutul fișierului.
r Fileul este lizibil.
Scriere - Fileul nu poate fi schimbat sau modificat.
w Fileul poate fi schimbat sau modificat.
Execute - Fileul nu poate fi executat.
x Fileul poate fi executat.
s Dacă se găsește în tripleta user, setează bitul setuid. Dacă se găsește în tripleta group, setează bitul setgid. Înseamnă, de asemenea, că stegulețul x este setat.
Când stegulețul setuid sau setgid este setat pe un fișier executabil, fișierul este executat cu privilegiile proprietarului și/sau ale grupului de fișiere.
S La fel ca s, dar stegulețul x nu este setat. Acest steguleț este rar folosit în fișiere.
t Dacă se găsește în tripleta others setează bitul sticky.
Semnează, de asemenea, că stegulețul x este setat. Acest steguleț este inutil în fișiere.
T La fel ca t dar stegulețul x nu este setat. Acest indicator este inutil în cazul fișierelor.

Efectul permisiunilor asupra directoarelor (folderelor)

În Linux, directoarele sunt tipuri speciale de fișiere care conțin alte fișiere și directoare.

Permisul Caracterul Semnificația asupra directorului
Citește - Conținutul directorului nu poate fi afișat.
r Contenutul directorului poate fi afișat.
(de ex. Puteți lista fișierele din interiorul directorului cu ls.)
Write - Contenutul directorului nu poate fi modificat.
w Contenutul directorului poate fi modificat.
(de ex. puteți crea fișiere noi, șterge fișiere ..etc.)
Execute - Directorul nu poate fi modificat.
x Directorul poate fi navigat folosind cd.
s Dacă se găsește în tripleta user, setează bitul setuid. Dacă se găsește în tripleta group, setează bitul setgid. De asemenea, înseamnă că steagul x este setat. Atunci când stegulețul setgid este setat pe un director, noile fișiere create în cadrul acestuia moștenesc ID-ul de grup al directorului (GID), în loc de ID-ul de grup primar al utilizatorului care a creat fișierul.
setuid nu are niciun efect asupra directoarelor.
S La fel ca s, dar stegulețul x nu este setat. Acest indicator este inutil în directoare.
t Dacă se găsește în tripleta others setează bitul sticky.
Semnează, de asemenea, că indicatorul x este setat. Când bitul sticky este setat pe un director, numai proprietarul fișierului, proprietarul directorului sau utilizatorul administrativ poate șterge sau redenumi fișierele din director.
T La fel ca t, dar nu este setat flagul x. Acest steguleț este inutil pe directoare.

Utilizarea chmod #

Comanda chmod are următoarea formă generală:

chmod MODE FILE...

Comanda chmod vă permite să modificați permisiunile unui fișier folosind fie un mod simbolic sau numeric, fie un fișier de referință. Vom explica mai în detaliu modurile mai târziu în acest articol. Comanda poate accepta ca argumente unul sau mai multe fișiere și/sau directoare separate prin spațiu.

Doar root, proprietarul fișierului sau un utilizator cu privilegii sudo poate modifica permisiunile unui fișier. Fiți foarte atenți atunci când folosiți chmod, în special atunci când modificați recursiv permisiunile.

Modul simbolic (text) #

Sintaxa comenzii chmod atunci când se folosește modul simbolic are următorul format:

chmod perms… FILE...

Primul set de stegulețe (), stegulețe utilizatori, definește în ce clase de utilizatori se modifică permisiunile fișierului.

  • u – Proprietarul fișierului.
  • g – Utilizatorii care sunt membri ai grupului.
  • o – Toți ceilalți utilizatori.
  • a – Toți utilizatorii, identic cu ugo.

Dacă indicatorul users este omis, cel implicit este a și permisiunile care sunt stabilite de umaskare nu sunt afectate.

Cel de-al doilea set de stegulețe (), stegulețele de operație, definește dacă permisiunile trebuie eliminate, adăugate sau setate:

  • - Elimină permisiunile specificate.
  • + Adaugă permisiunile specificate.
  • = Schimbă permisiunile curente cu permisiunile specificate. Dacă nu se specifică nici o permisiune după simbolul =, se elimină toate permisiunile din clasa de utilizatori specificată.

Permisiunile (perms...) pot fi setate explicit folosind fie zero, fie una sau mai multe dintre următoarele litere: r, w, x, X, s și t. Utilizați o singură literă din setul u, g și o atunci când copiați permisiunile de la o clasă de utilizatori la alta.

Când setați permisiuni pentru mai multe clase de utilizatori (), utilizați virgule (fără spații) pentru a separa modurile simbolice.

Acestea sunt câteva exemple de utilizare a comenzii chmod în mod simbolic:

  • Dă-le membrilor grupului permisiunea de a citi fișierul, dar nu și de a-l scrie și executa:

    chmod g=r filename
  • Îndepărtați permisiunea de execuție pentru toți utilizatorii:

    chmod a-x filename
  • Înlătură în mod repetat permisiunea de scriere pentru ceilalți utilizatori:

    chmod -R o-w dirname
  • Înlătură permisiunea de citire, scriere și execuție pentru toți utilizatorii, cu excepția proprietarului fișierului:

    chmod og-rwx filename

    Același lucru poate fi realizat și prin utilizarea următoarei forme:

    chmod og= filename
  • Acordați permisiuni de citire, scriere și execuție proprietarului fișierului, permisiuni de citire grupului fișierului și nici o permisiune pentru toți ceilalți utilizatori:

    chmod u=rwx,g=r,o= filename
  • Adaugați permisiunile proprietarului fișierului la permisiunile pe care le au membrii grupului fișierului:

    chmod g+u filename
  • Adaugați un bit lipicios la un anumit director:

    chmod o+t dirname

Metoda numerică #

Sintaxa comenzii chmod atunci când se folosește metoda numerică are următorul format:

chmod NUMBER FILE...

Când folosiți modul numeric, puteți seta permisiunile pentru toate cele trei clase de utilizatori (proprietar, grup și toți ceilalți) în același timp.

Numărul NUMBER poate fi un număr din 3 sau 4 cifre.

Când se utilizează un număr din 3 cifre, prima cifră reprezintă permisiunile proprietarului fișierului, a doua reprezintă grupul fișierului, iar ultima toți ceilalți utilizatori.

Care permisiune de scriere, citire și execuție are următoarea valoare numerică:

  • r (citire) = 4
  • w (scriere) = 2
  • x (execuție) = 1
  • fără permisiuni = 0

Numărul de permisiuni al unei anumite clase de utilizatori este reprezentat de suma valorilor permisiunilor pentru grupul respectiv.

Pentru a afla permisiunile fișierului în mod numeric este suficient să se calculeze totalurile pentru toate clasele de utilizatori. De exemplu, pentru a acorda permisiuni de citire, scriere și execuție proprietarului fișierului, permisiuni de citire și execuție grupului de utilizatori al fișierului și doar permisiuni de citire tuturor celorlalți utilizatori, trebuie să procedați după cum urmează:

  • Proprietar: rwx=4+2+1=7
  • Grup: r-x=4+0+1=5
  • Alții: r-x=4+0+0+0=4

Utilizând metoda de mai sus, ajungem la numărul 754, care reprezintă permisiunile dorite.

Pentru a configura stegulețele setuid, setgid și sticky bit folosim un număr de patru cifre.

Când se folosește numărul de 4 cifre, prima cifră are următoarea semnificație:

  • setuid=4
  • setgid=2
  • sticky=1
  • fără modificări = 0

Celelalte trei cifre au aceeași semnificație ca atunci când se folosește numărul de 3 cifre.

Dacă prima cifră este 0, aceasta poate fi omisă, iar modul poate fi reprezentat cu 3 cifre. Modul numeric 0755 este același cu 755.

Pentru a calcula modul numeric se poate folosi și o altă metodă (metoda binară), dar este puțin mai complicată. Să știi cum să calculezi modul numeric folosind 4, 2 și 1 este suficient pentru majoritatea utilizatorilor.

Puteți verifica permisiunile fișierului în notație numerică folosind comanda stat:

stat -c "%a" filename
644

Iată câteva exemple de utilizare a comenzii chmod în mod numeric:

  • Acordați proprietarului fișierului permisiuni de citire și scriere și numai permisiuni de citire membrilor grupului și tuturor celorlalți utilizatori:

    chmod 644 dirname
  • Acordați proprietarului fișierului permisiuni de citire, scriere și execuție, permisiuni de citire și execuție membrilor grupului și nici o permisiune tuturor celorlalți utilizatori:

    chmod 750 dirname
  • Acordați permisiuni de citire, scriere și execuție, precum și un sticky bit unui anumit director:

    chmod 1777 dirname
  • Setați recursiv permisiuni de citire, scriere și execuție pentru proprietarul fișierului și nici o permisiune pentru toți ceilalți utilizatori pe un anumit director:

    chmod -R 700 dirname

Utilizarea unui fișier de referință #

Opțiunea --reference=ref_file vă permite să setați permisiunile fișierului să fie aceleași cu cele ale fișierului de referință specificat (ref_file).

chmod --reference=REF_FILE FILE

De exemplu, următoarea comandă va atribui permisiunile din file1 la file2

chmod --reference=file1 file2

Modificarea recursivă a permisiunilor fișierului #

Pentru a opera recursiv asupra tuturor fișierelor și directoarelor din directorul dat, utilizați opțiunea -R (--recursive):

chmod -R MODE DIRECTORY

De exemplu, pentru a modifica permisiunile tuturor fișierelor și subdirectoarelor de sub directorul /var/www la 755, veți folosi:

chmod -R 755 /var/www

Operarea pe legături simbolice #

Legăturile simbolice au întotdeauna permisiuni 777.

În mod implicit, atunci când schimbați permisiunile legăturii simbolice, chmod va schimba permisiunile asupra fișierului spre care indică legătura.

chmod 755 symlink

Sunt șanse ca în loc să schimbați proprietatea țintă, să primiți un mesaj „cannot access ‘symlink’: Permission denied” (permisiune refuzată).

Eroarea apare deoarece, în mod implicit, în majoritatea distribuțiilor Linux, legăturile simbolice sunt protejate și nu puteți opera asupra fișierelor țintă. Această opțiune este specificată în /proc/sys/fs/protected_symlinks. 1 înseamnă activat și 0 dezactivat. Se recomandă să nu dezactivați protecția symlink-urilor.

Schimbarea permisiunilor fișierelor în bloc #

Câteodată există situații în care ar trebui să schimbați în bloc permisiunile fișierelor și directoarelor.

Cel mai comun scenariu este să schimbați recursiv permisiunile fișierului site-ului la 644 și permisiunile directoarelor la 755.

Utilizarea metodei numerice:

find /var/www/my_website -type d -exec chmod 755 {} \;find /var/www/my_website -type f -exec chmod 644 {} \;

Utilizarea metodei simbolice:

find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;

Comanda find va căuta fișiere și directoare sub /var/www/my_website și va trece fiecare fișier și director găsit la comanda chmod pentru a seta permisiunile.

Concluzie #

Comanda chmod modifică permisiunile fișierului. Permisiunile pot fi setate folosind modul simbolic sau numeric.

Pentru a afla mai multe despre chmod vizitați pagina de manual chmod.

.

Similar Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată.