chmod este o comandă shell pentru modificarea permisiunilor de acces și a indicatorilor de mod special pentru fișiere, inclusiv fișiere speciale, cum ar fi directoarele. Numele este o prescurtare de la „change mod”, unde „mod” se referă la permisiuni și indicatori în sens colectiv.
Comanda își are originea în AT&T Unix versiunea 1 și a fost folosită inițial doar pe sistemele de operare Unix și de tip Unix, până când a fost portată pe alte sisteme, precum Windows (prin UnxUtils) și IBM i.
În sistemele de operare Unix și de tip Unix, o comandă de sistem cu același nume oferă acces la datele de control al accesului. Comanda expune capacitățile apelului de sistem către utilizatorul shell.
Pe măsură ce a crescut nevoia de permisiuni mai avansate pentru sistemele de fișiere, listele de control al accesului au fost adăugate la multe sisteme de fișiere pentru a extinde modurile controlate prin chmod.
Implementarea chmod inclusă în GNU coreutils a fost scrisă de David MacKenzie și Jim Meyering.
Utilizare
Deși sintaxa comenzii variază oarecum în funcție de implementare, aceasta acceptă în general fie o singură valoare octală, care specifică toți biții de mod ai fiecărui fișier, fie o listă de specificatori simbolici separați prin virgulă, care descriu cum se modifică biții de mod existenți. Argumentele rămase sunt o listă de căi către fișierele care urmează să fie modificate.
Modificarea permisiunilor este permisă doar superutilizatorului și proprietarului unui fișier.
Dacă este specificată o legătură simbolică, biții de mod ai țintei sunt ajustați. Permisiunile asociate direct cu intrarea din sistemul de fișiere reprezentată de legătura simbolică nu sunt, de obicei, utilizate.
Opțiuni
Opțiunile din linia de comandă pot include:
-R: recursiv; include fișierele și subdirectoarele conținute în directoarele specificate -v: mod detaliat; afișează numele fișierelor modificate
Notație octală
Atunci când primește un argument numeric pentru permisiuni, comanda chmod îl tratează ca pe un număr octalnotează că „space delimited” este o caracteristică a shell-ului, nu a comenzii chmod în sine. și înlocuiește toți biții de mod pentru fiecare fișier. Deși sunt specificate patru cifre, cifra 0 din față poate fi omisă.
Există doisprezece biți standard de mod: trei biți speciali (setuid, setgid și sticky) și trei grupuri de permisiuni pentru utilizator, grup și alții, fiecare cu câte 3 biți: citire, scriere și execuție. Fiecare bit acordă acces dacă este setat și îl refuză dacă este șters.
Deoarece o cifră octală reprezintă 3 biți, cei doisprezece biți de mod pot fi reprezentați prin patru cifre octale. chmod acceptă până la patru cifre și folosește 0 pentru cifrele din stânga nespecificate. În practică, de obicei se folosesc trei cifre, deoarece modurile speciale sunt rareori utilizate, iar clasa utilizatorului este de obicei specificată.
În contextul unei cifre octale, valorile sunt: citire = 4, scriere = 2, execuție = 1. Tabelul următor leagă valorile octale de permisiunile corespunzătoare.
+ Permisiune cifră octală # biți rwx operațiuni acordate 7 4 + 2 + 1 rwx citire, scriere și execuție 6 4 + 2 rw- citire și scriere 5 4 + 1 r-x citire și execuție 4 4 r-- doar citire 3 2 + 1 -wx scriere și execuție 2 2 -w- doar scriere 1 1 --x doar execuție 0 --- niciuna
Comanda stat poate raporta permisiunile unui fișier în notație octală. De exemplu:
$ stat -c %a findPhoneNumbers.sh 754
Valoarea 754 indică următoarele permisiuni:
clasa utilizator: citire, scriere și execuție; 7 = 4 + 2 + 1 clasa grup: citire și execuție; 5 = 4 + 1 alte clase: doar citire; 4
Un cod permite execuția dacă și numai dacă este impar (1, 3, 5 sau 7). Un cod permite citirea dacă și numai dacă este mai mare sau egal cu 4 (4, 5, 6 sau 7). Un cod permite scrierea dacă și numai dacă este 2, 3, 6 sau 7.
Notație simbolică
Comanda chmod acceptă notație simbolică pentru modificarea permisiunilor existente. Comanda acceptă o listă de specificatori separați prin virgulă, de forma:
[clase]+|-|= operații
Clasele mapate către permisiuni sunt următoarele. Un specificator de modificare poate selecta o clasă prin simbolul acesteia, mai multe clase prin concatenarea simbolurilor fără delimitator sau toate clasele fără a specifica un simbol. Când se folosește ultima metodă, biții măștii umask rămân neschimbați.
+ Specificatori de clasă simbol descriere u utilizator: proprietarul fișierului g grup: membrii grupului fișierului o alții: utilizatori care nu sunt nici proprietarul fișierului, nici membri ai grupului fișierului a toate cele trei clase; echivalent cu ugo
Întrucât proprietatea este esențială pentru controlul accesului și, fiindcă notația simbolică folosește abrevierea „o”, unii cred în mod eronat că aceasta înseamnă „owner”, când, de fapt, înseamnă „others”.
Operatorii de modificare sunt:
+ Operatori simbol descriere + adaugă operațiuni - elimină operațiuni = setează câmpul complet de operațiuni; acordă operațiunile specificate și le elimină pe celelalte
Operațiunile pot fi specificate astfel:
+ Specificatori de operațiuni simbol descriere r citește un fișier obișnuit sau afișează conținutul unui director w scrie într-un fișier x execută un fișier obișnuit sau parcurge un arbore de directoare X execuție specială: aplică execuția directoarelor și fișierelor care au deja cel puțin o permisiune de execuție acordată; util mai ales cu + și, de obicei, împreună cu -R s mod setuid sau setgid t sticky mode
Majoritatea implementărilor chmod suportă specificarea modurilor speciale în octal, dar unele nu o fac, ceea ce necesită notația simbolică.
Comanda ls poate raporta permisiunile fișierelor într-o notație simbolică similară cu cea folosită de chmod. ls -l afișează permisiunile prin 10 caractere. Primul indică tipul intrării din sistemul de fișiere, cum ar fi cratimă pentru fișier obișnuit și „d” pentru director. Urmează trei grupuri de câte trei litere care indică permisiunile de citire, scriere și execuție pentru utilizator, grup și alții. Fiecare poziție este fie o cratimă, dacă permisiunea lipsește, fie litera corespunzătoare, dacă este acordată.
De exemplu:
$ ls -l findPhoneNumbers.sh -rwxr-xr-- 1 dgerman staff 823 Dec 16 15:03 findPhoneNumbers.sh
Specificatorul -rwxr-xr-- începe cu o cratimă, ceea ce indică faptul că findPhoneNumbers.sh este un fișier obișnuit, nu un director. Următoarele trei litere rwx arată că fișierul poate fi citit, scris și executat de utilizatorul proprietar dgerman. Următoarele trei litere r-x arată că fișierul poate fi citit și executat de membrii grupului staff. Ultimele trei litere r-- arată că fișierul este doar pentru citire pentru ceilalți utilizatori.
Exemple
Adăugați permisiunea de scriere pentru clasa de grup a unui director, permițând utilizatorilor din același grup să adauge fișiere:
$ ls -ld dir # înainte drwxr-xr-x 2 jsmitt northregion 96 Apr 8 12:53 shared_dir $ chmod g+w dir $ ls -ld dir # după drwxrwxr-x 2 jsmitt northregion 96 Apr 8 12:53 shared_dir
Eliminați permisiunea de scriere pentru toate clasele, împiedicând pe oricine să scrie în fișier:
$ ls -l ourBestReferenceFile -rw-rw-r-- 2 tmiller northregion 96 Apr 8 12:53 ourBestReferenceFile $ chmod a-w ourBestReferenceFile $ ls -l ourBestReferenceFile -r--r--r-- 2 tmiller northregion 96 Apr 8 12:53 ourBestReferenceFile
Setați permisiunile pentru clasele utilizator și grup doar pentru citire și execuție, fără permisiune de scriere:
$ ls -ld referenceLib drwxr----- 2 ebowman northregion 96 Apr 8 12:53 referenceLib $ chmod ug=rx referenceLib $ ls -ld referenceLib dr-xr-x--- 2 ebowman northregion 96 Apr 8 12:53 referenceLib
Activați citirea și scrierea pentru clasa de utilizator, făcând-o în același timp doar pentru citire pentru grup și alții:
$ chmod u=rw,go=r sample $ ls -ld sample drw-r--r-- 2 oschultz warehousing 96 Dec 8 12:53 sample
Pentru a seta recursiv accesul pentru directorul docs/ și fișierele conținute în acesta:
chmod -R u+w docs/
Pentru a seta utilizatorul și grupul doar pentru citire și scriere, iar alte persoane doar pentru citire:
chmod 664 file
Pentru a seta utilizatorul doar pentru citire, scriere și execuție, iar grupul și alții doar pentru citire:
chmod 744 file
Pentru a seta sticky bit pe lângă permisiunile utilizatorului, grupului și altora:
chmod 1755 file
Pentru a seta UID-ul pe lângă permisiunile de utilizator, grup și alte permisiuni:
chmod 4755 file
Pentru a seta GID pe lângă permisiunile de utilizator, grup și alte permisiuni:
chmod 2755 file
Note
Vezi și chgrp — modifică grupul unui fișier chown — schimbă proprietarul unui fișier
Legături externe
chmod(1): change file modes – FreeBSD General Commands Manual chmod(1) – Plan 9 Programmer's Manual, Volume 1 chmod(1) – Inferno General commands Manual chmod — manual page from GNU coreutils GNU "Setting Permissions" manual CHMOD-Win 3.0 — Freeware Windows' ACL ↔ CHMOD converter Beginners tutorial with on-line "live" example
Categorie:Comenzi UNIX