Sunteți pe pagina 1din 8

Laboratorul 3

Drepturi de acces. Daca se tasteaza comanda ls -l cale pentru fiecare fisier sau
sub-director se va afisa o linie de genul:

In raport cu un fiier sau director, din punct de vedere al drepturilor, utilizatorii se mpart
n trei categorii:
proprietarul fiierului (u - user).
grupul de utilizatori (g - group), de exemplu o grup de studeni particip la un
acelai proiect, motiv pentru care administratorul poate constitui un astfel de grup,
cu drepturi specifice - de regul mai slabe dect ale proprietarului, dar mai
puternice dect ale restului utilizatorilor.
restul utilizatorilor (o - others) cei care nu sunt n primele dou categorii.
toi utilizatorii (a-all), echivalent cu combinaia ugo.
Nucleul SO Linux identific utilizatorii prin numere naturale asociate unic, numite UIDuri (User IDentifications). De asemenea, identific grupurile de utilizatori prin numere
numite GID-uri (Group IDentifications). Un utilizator aparte, cu drepturi depline asupra
tuturor fiierelor este root sau superuserul. Pentru fiecare categorie de utilizatori, fiierul
permite maximum trei drepturi:
dreptul de citire (r - read)
dreptul de scriere (w - write) care include crearea de subdirectori, tergerea de
subdirectori, adugarea sau tergerea de intrri n director, modificarea fiierului,
etc.
dreptul de execuie (x - execution) care permite lansarea n execuie a unui fiier.
Acest drept, conferit unui director, permite accesul n directorul respectiv (cd) .
n consecin, pentru specificarea drepturilor de mai sus asupra unui fiier sau director
sunt necesari 9 (nou) bii. Reprezentarea extern a acestei configuraii se face printr-un
grup de 9 (nou) caractere: rwxrwxrwx n care absena unuia dintre drepturi la o categorie
de useri este indicat prin - (minus).
Modul de atribuire a acestor drepturi se poate face cu ajutorul comenzii chmod. Cea mai
simpl form a ei este:
chmod mod fisier
unde mod poate fi absolut sau simbolic. n cazul absolut este un ntreg reprezentat n
sistemul de numeraie 8. n reprezentare binar, prima grup de 3 bii indic drepturile
proprietarului(user-ului), cea de-a doua indic drepturile grupului, iar cea de-a treia cifr
indic drepturile restului utilizatorilor.
Corespunzator unei anumite cifre octale, drepturile setate sunt prezentate in tabelul
urmator (simbolul inseamna ca dreptul respectiv nu este setat).
Numar

Permisiune

---

--x

-w-

-wx

r--

r-x

rw-

rwx

Modul simbolic este o combinaie ntre literele u,g,o,r,w,x i semnele + (acordarea


unui drept), - (ridicarea unui drept).
Exemplu 4: Comanda:
chmod 755 fis1
fixeaz la fiierul fis1 toate drepturile pentru user, de citire i execuie pentru grup i
ceilali utilizatorii. n urma acestei comenzi, drepturile asupra fiierului fis1 vor deveni:
rwxr-xr-x (n reprezentare binar 755 este 111101101). Dac se d comanda
chmod g+w fis1
atunci grupului de utilizatori i se vor da drepturi de scriere. Dac se d comanda
chmod g-x fis1
atunci grupului de utilizatori i se vor lua drepturile de execuie. Dac se d comanda
chmod a-r fis1
se va lua dreptul de citire al tuturor utilizatorilor.
Drepturi implicite: umask. n momentul intrrii n sistem, unui user i se vor acorda
nite drepturi implicite pentru fiiere nou create. Toate fiierele i directoarele create de
user pe durata sesiunii de lucru l vor avea ca proprietar, iar drepturile vor fi cele primite
implicit. Fixarea drepturilor implicite sau aflarea valorii acestora se poate face folosind
comanda umask. Drepturile implicite sunt stabilite scznd (octal) masca definit prin
umask din 777. Pentru a se afla valoarea mtii se lanseaz comanda umask.
Rezultatul este afiarea mtii, de regul 022. Deci drepturile implicite vor fi: 777022=755, adic userul are toate drepturile, iar grupul i restul vor avea doar drepturi de
citire i de execuie.
Dac se dorete schimbarea acestei mti pentru a da userului toate drepturile, grupului
drept de citire i execuie iar restului nici un drept, (corespunztoare constantei octale
750), se va da comanda
umask 027 (fiindc 777-027=750).
Efectul ei va rmne valabil pn la un nou umask sau pn la ncheierea sesiunii.
Modificarea proprietarului sau a grupului se poate face, n aceleai condiii folosind
comanda chown.
Drepturi de lansare, drepturi program executabil, biii setuid i setgid. n aceast
seciune vom analiza, din punct de vedere al drepturilor de acces, relaia dintre un
utilizator, programul executabil pe care l lanseaz i fiierele asupra crora acioneaz
programul n cursul execuiei lui. Pentru fixarea ideilor, s considerm un exemplu.
Presupunem c:
1. un utilizator U, care face parte dintr-un grup G, lanseaz n execuie un program P.
Pe durata execuiei, programul P acioneaz asupra unui fiier F.

1. programul P are ca proprietar utilizatorul UP care face parte din grupul GP, iar
drepturile fiierului executabil P sunt rwxr-xr-x.
2. fiierul F asupra cruia se acioneaz are proprietarul UF care face parte din
grupul GF, iar drepturile fiierului F sunt rwxr-xr--.
n aceste ipoteze, userul U poate s lanseze n execuie programul P, deoarece acesta
confer drepturi de execuie tuturor utilizatorilor. (Dac drepturile lui P ar fi fost rwxr-r--, atunci lansarea n execuie ar fi fost posibil numai dac U = UP. Dac drepturile
lui P ar fi fost rwxr-xr--, atunci lansarea ar fi fost posibil numai dac U = UP sau G
= GP.)
Dup lansarea n execuie de ctre U a lui P, n mod implicit aciunile pe care programul
P le poate efectua asupra fiierului F sunt cele permise de drepturile pe care U le are
asupra lui F. In exemplul nostru, dac U = UF atunci P poate citi, scrie sau executa F.
Dac G = GF atunci P poate citi sau executa F, iar dac G i GF sunt diferite atunci P
poate numai s citeasc din F. Aceast regul, prin care drepturile lansatorului de program
permit sau nu unele operaii pe care programul lansat le aplic unui fiier, este regula
cvasigeneral de aciune asupra fiierelor.
Exist ns situaii, nu foarte frecvente, n care aceast regul se poate schimba.
Schimbarea este cunoscut sub numele setuid / setgid i se refer, cu notaiile de mai sus,
la faptul c: Dup lansarea n execuie de ctre U a lui P, n mod setuid / setgid aciunile
pe care programul P le poate efectua asupra fiierului F sunt cele permise de drepturile
proprietarului programului P i ale grupului din care face parte acesta. Este vorba de doi
bii importani relativ la drepturile de acces, aa numiii bit setuid (set-user-id) care pus
pe 1 schimb drepturile lui U cu drepturile lui UP i bitul setgid, care pus pe 1 schimb
drepturile lui G cu drepturile lui GP. (Aceste schimbri au loc numai la execuia
programului P). Cu alte cuvinte, dac pentru un fiier executabil bitul setuid este 1,
atunci un utilizator care lanseaz n execuie acest fiier (evident, dac are dreptul s-l
lanseze) primete, pe timpul execuiei, aceleai drepturi de acces la resurse (fiiere,
semafoare, zone de memorie etc.) ca i proprietarul fiierului executabil.
S vedem o situaie concret n care este util folosirea bitului setuid. Un
utilizator cu numele profesor ntreine un fiier note al crui proprietar este. Din raiuni
lesne de neles, drepturile fiierului note sunt fixate la rw-------. Utilizatorul
profesor dorete s permit utilizatorilor din grupul studenti s vad unele informaii
din fiierul note.
Pentru aceasta, profesor creeaz un fiier executabil examen (proprietarul lui examen
este profesor) care permite citirea (eventual selectiv) de informaii din fiierul note.
Proprietarul atribuie pentru examen drepturile rwx--x--x i pune bitul setuid al lui
examen pe 1. Aceast atribuire se face cu comanda chmod
+s examen. Noile
drepturi afiate ale lui examen sunt: rws--x--x
Utilizatorii studenti, n momentul lansrii programului examen, primesc aceleai
drepturi de acces la fiiere ca i profesor. In particular programul examen poate accesa
fiierul note (vezi drepturile acestui fiier) chiar dac el nu a fost lansat n execuie de
ctre profesor. In absena lui setuid pentru examen, acesta poate fi, totui lansat n
execuie, ns nu poate s acceseze fiierul note.
Dup cum spuneam mai sus, nucleul SO Linux identific utilizatorii prin numere
naturale asociate unic, numite UID-uri (User IDentifications). De asemenea, identific

grupurile de utilizatori prin numere numite GID-uri (Group IDentifications). Pe parcursul


execuiei programului examen acestuia i se mai asociaz n plus identificatorul EUID
(effective UID), care coincide cu UID-ullui profesor, prin care asigur accesul la
resurse.
Mecanismul setuid permite o foarte elastic manevrare a fiierelor. In schimb,
dac superuserul gestioneaz prost acest mecanism, atunci potenialii infractori au un
cmp larg de aciune. S considerm, din raiuni evidente, doar un scenariu simplu:
Presupunem ca root este proprietar al unui fiier executabil cu bitul setuid setat i
cu drept de scriere pentru alii. In aceast situaie, un ruvoitor poate s modifice acest
fiier executabil aa nct s aib o aciune malefic ce presupune acces la resurse ale
superuserului!. Aciunea se va putea executa deoarece EUID-ul este UID-ul lui root!
Modificarea drepturilor de acces la fiiere se poate face numai de ctre
proprietarul fiierului (sau de ctre superuser), folosind comanda chmod. Modificarea
proprietarului sau a grupului se poate face, n aceleai condiii folosind comanda chown.
Un exemplu tipic n care se folosete setuid este comanda /usr/bin/passwd.
Aceasta este lansat de ctre fiecare utilizator atunci cnd dorete s-i schimbe parola.
Efectul ei se rsfrnge asupra fiierului /etc/shadow. In acest scop, se stabilesc
drepturile:
-r-s--x--x 1 root root 22312 Sep 25 18:52 /usr/bin/passwd
-r-------- 1 root root 10256 Mar 2 14:40 /etc/shadow
Deci programul passwd are setuid, ceea ce permite accesul la /etc/shadow numai
prin programul /usr /bin/passwd.
Comanda find (=gsete) realizeaz cutarea ntr-o structur de directoare,
specificnd numele directorului(calea), criteriul de cutare i opional aciunea care se
execut asupra fiierelor gsite.
Sintax:
find lista-cale expresii
Cutarea dupa nume se face cu opiunea -name
Exemple:
$ find / -name fisier
va lista toate fiierele dintr-un sistem de fisiere(de pe un disc) al cror nume este
`fisier' ; aceast comand va cuta n toate directoarele la care este permis accesul;
dac nu este permis accesul se va semnala acest lucru. Opiunea -name este case
sensitive; se folosete opiunea `-iname dac nu se dorete s se fac distinie ntre
literele mari i cele mici.
$ find / -iname fisier
Aceast comand va include n rezultatul cutrii i Fisier sau fIsier , de
exemplu.
n cutarea fiierelor se pot folosi i abloane i n acest caz numele de fiier este
specificat ntre apostroafe.
$ find / -name fis*
listeaz toate fiierele din sistem al cror nume ncepe cu caracterele `fis.
$ find / -name fis???

listeaz toate fiierele din sistem al cror nume ncepe cu caracterele `fis, urmate
de trei caractere oarecare.
$ find /home/so -name *fis*
listeaz toate fiierele din din structura care pornete din directorul

/home/so cu textul `fis' inclus n nume.


Se folosete -regex n locul lui -name pentru a face cutarea pentru fiiere al cror
nume trebuie s ndeplineasc un ablon definit printr-o expresie regulat
$ find . -regex `.*\(a1\|a2\).*`
listeaz toate fiierele din structura care pornete din directorul curent al cror nume
contine irurile `a1` sau `a2` oriunde n numele lor.
Cutarea fiierelor dup dimensiune se face cu opiunea -size, urmat de un numr
natural, opional precedat de un semn. Avem trei cazuri:
1. cnd este precedat de semnul `+`, rezultatul cutrii va fi toate fiierele care au
dimensiunea mai mare dect numrul dat;
2. cnd este precedat de semnul `-`,vor fi selectate toate fiierele a cror dimensiune
este mai mic dect numrul dat;
3. cnd nu este specificat nici un semn rezultatul va consta din toate fiierele care au
exact aceeai dimensiune.
Unitatea implicit este blocul de 512 baii; dac numrul specificat anterior este urmat
de caracterul `k,respectiv `b'
atunci unitatea de msur este
kilobaitul,respectiv baitul.
Exemple:
$ find ~ -size +1000k
va lista toate fiierele din structura care pornete din directorul `/usr/local' care au
mai mult de 10,00 kilobaii.
$ find ~ -size -500b
va lista toate fiierele din structura care pornete din directorul gazd care au o
dimensiune mai mic de 500 baii
$ find / -size 42
va lista toate fiierele din sistem care au o dimensiune de 42 de blocuri a cte 512 baii.
Se folosete opiunea `-empty`pentru a se gsi toate fiierele de dimensiune nul.
$ find ~ -empty
va afia toate fiierele vide din structura care pornete din directorul gazd.
Cutarea fiierelor dup momentul modificrii. Pentru a gsi fiiere modificate ntr-un
interval de timp specificat, se folosesc opiunile -mtime sau -mmin; argumentul folosit
cu `-mtime` specific numrul de zile, pe cnd cel cu `-mmin` specific numrul de
minute.
Exemple:
$ find /usr/local -mtime 1
va lista toate fiierele din structura care pornete din directorul /usr/local care au
fost modificate n ultimele 24 de ore.
$ find /usr -mmin 5
va lista toate fiierele din structura care pornete din directorul /usr care au fost
modificate n ultimele 5 minute.

Pentru a specifica un interval de timp, numrul utilizat ca argument, va fi precedat de


semnul `+', respectiv `-', avnd semnificaia selectrii tuturor fiierelor
pentru care timpul de la ultima modificare este mai mare sau egal, respectiv mai mic sau
egal dect argumentul specificat.
Exemple:
$ find /usr/local -mtime -1
va afia toate fiierele din structura care pornete din directorul/usr/local care au fost
modificate n ultimele 24 de ore.
$ find /usr -mmin -5
va lista toate fiierele din structura care pornete din directorul /usr care au fost
modificate n ultimele 5 minute.
Opiunea -daystart va specifica faptul c contorizarea timpului se va face ncepnd
din ziua curent, n loc de ziua trecut
Exemple:
$ find ~ -mtime 2 -daystart
va lista toate fiierele din structura care pornete din directorul gazd care au fost
modificate de acum dou zile.
$ find /usr -mtime +356 -daystart
va lista toate fiierele din directorul structura care pornete din /usr care au fost
modificate de cel mult un an.
$ find ~ -mtime 2 -mtime -4 -daystart
va lista toate fiierele din structura care pornete din directorul gazd acum dou
pn la patru zile. n exemplul precedent am combinat opiunile -mtime 2
i -mtime -4.

Opiunea -newer va fi folosit pentru a gsi fiierele mai noi dect un fiier dat.
Exemplu:
$ find ~ -newer /etc/fis
va lista toate fiierele din directorul structura care pornete din ~ care au au data de
creare mai recent dect fiierul /etc/fis.
Pentru a cuta fiiere a cror dat de creare este ulterioar unei date specificate, se va
folosi comanda touch pentru a introduce acea dat ntr-un fiier, care va fi argument pentu
opiunea
-newer.
Exemplu:
$ touch -t 04010000 /tmp/timestamp
$ find ~ -newer /tmp/timestamp
va cuta toate fiierele din structura care pornete din directorul gazd care au fost
modificate dup 1 aprilie 2008(anul curent)
Opiunea used este folosit pentru a gsi fiiere accesate dup un numr de zile de la
ultima modificare.
Exemplu:
$ find ~ -used +100
va cuta fiierele din structura care pornete din directorul gazd care au fost accesate
dup cel puin 100 de zile de la data ultimei modificri.
Cutarea fiierelor dup proprietar
Cu opiunea user, respectiv group se pot cuta fiiere care aparin unui anumit
utilizator, respectiv unui grup de utilizatori.

Exemple:
$ find ~/florea -user florea
va lista toate fiierele din structura care pornete din /usr/local/fonts care aparin
utilizatorului florea.
$ find ~ -group info
va lista toate fiierele din structura care pornete din directorul ~ al cror proprietar este
grupul info.
Execuia de comenzi asupra fiierelor cutate se realizeaz cu opiunea -exec care are
ca argument o anumit comand. Sfritul comenzii este marcat de caracterele ;. Dac
se folosete irul `'{}'` n cadrul comenzii, acesta este nlocuit cu numele de fiier care a
fost gsit

Exemple:

$ find . -name *.o -exec rm {} ;;


va terge toate fiierele cu sufixul .o, situate n catalogul curent sau n subcataloagele
acestuia.
$ find ~/html/ -name '*.html' -exec grep linux `{}` `;`
va gsi toate fiierele din structura care pornete din directorul ~/html/ cu extensia
.html i va afia liniile din aceste fiiere care conin textul `linux .
Pentru a se realiza comanda respectiv cu confirmare, se folosete -ok n locul lui
-exec.
$ find ~ -used +365 -ok rm `{}` `;`
va gsi toate fiierele din structura care pornete din directorul gazd, care au fost
accesate la mai mult de un an de cnd au fost modificate i va atepta confirmarea nainte
de tergere.
Cutarea fiierelor dup mai multe criterii. Se pot combina mai multe opiuni pentru a
se gsi fiierele care ndeplinesc criterii multiple.

Exemple:

$ find ~ -name 'fis*' -newer /etc/ultmod


va lista fiierele din structura care pornete din directorul gazd al cror nume ncepe cu
irul `topi care sunt mai noi dect fiierul /etc/ultmod
$ find ~ -size +2000000c -regex '.*[^gz]' -exec gzip '{}'
';'
va comprima toate fiierele din structura care pornete din directorul gazd i care au 0
dimensiune de cel puin doi megabaii i care nu au fost comprimate folosind comanda
gzip

Legarea n pipe a comenzii find cu alte comenzi


Exemple:
$ find ~ \! -type d | wc -l
va lista numrul fiierelor din structura care pornete din directorul gazda.
$ find /usr/share | wc -l
va lista numrul fiierelor i directoarelor din structura care pornete din directorul
/usr/share.

$ find /usr/share \! -type f | wc l


va lista numrul directoarelor din structura care pornete din directorul /usr/share.
Alte optiuni:
b)
-perm onum - true dac drepturile de acces la fiier corespund exact

numrului octal onum.


c)
-type c - true dac tipul fiierului este c (un caracter care poate fi: f - fiier
simplu; d - catalog; b - fiier special bloc; c - fiier special caracter; p - pipe (canal) cu
nume; s - socket (pentru comunicarea n reea).
d)
-user uname - true dac proprietarul fiierului este uname;
e)
-atime n - true dac fiierul nu a fost accesat de n zile;
f)
-mtime n - true dac fiierul nu a fost modificat de n zile;
g)
-ctime n - true dac fiierul nu a fost schimbat de n zile (schimbat nseamn
aici fie modificarea fiierului propriu-zis, fie modificarea atributelor sale);
h)
-print - ntotdeauna adevrat, are ca efect afiarea numelui fiierului curent
(care corespunde unui criteriu de cutare anterior specificat);
i)
-ls - ntotdeauna adevrat, are ca efect afiarea numelui de cale al fiierului
curent i informaii suplimentare despre acesta (analog comenzii ls -li);
j)
-prune - ntotdeauna adevrat, are ca efect colateral oprirea cutrii la numele
de cale curent, dac acesta este catalog (nu se caut recursiv);

S-ar putea să vă placă și