Showing posts with label korisnici. Show all posts
Showing posts with label korisnici. Show all posts

Thursday, July 19, 2012

Temeljne dozvole na Linux/Unix operacijskom sustavu...

Na Linuxu postoje tri sustava za kontrolu pristupa objektima (primjerice datotekama, procesima, dijeljenoj memoriji):
  1. Temeljne Unix dozvole koje su nastale s prvim Unixom i danas ih podržavaju svi klonovi Unixa.
  2. ACL-ovi koju su naprednija varijanta temeljnih Unix dozvola, odnosno, njihova nadogradnja.
  3. SELinux dozvole koje su specifične za Linux i dosta složenije od prethodne dvije vrste.
U ovom postu bit će riječi samo o temeljnim Unix dozvolama koje su relativno jednostavne za shvatiti i koristiti. Preporučam prije ovog posta pročitati post o  korisnicima i grupama.

Kao što je rečeno u postu o korisnicima i grupama kada se izlista fajl korištenjem naredbe ls, dobija se nešto u sljedećem stilu:
$ ls -l mozilla.pdf
-rw-r--r--. 1 sgros zemris 40360 Vel 27 21:30 mozilla.pdf
Vlasnik je u ovom slučaju korisnik sgros, dok je grupa zemris. Grupa znakova na početku su dozvole, počevši od drugog znaka, slova r. Prvi znak je tip datotečnog objekta i ako je tamo minus onda se radi o običnoj datoteci - što je ovdje slučaj.

Dozvole idu u grupama po tri znaka (odnosno, tri bita budući da se svaki znak zapisuje korištenjem jednog bita). U ovom slučaju su grupe dozvola rw-, zatim r-- i konacno r--. Prva grupa (rw-) primjenjuje se kada vlasnik datoteke pokuša pristupiti datoteci. Druga grupa (r--) primjenjuje se kada korisnik koji je član grupe kojoj datoteka pripada pokuša pristupiti datoteci. Konačno, treća grupa (r--) se primjenjuje na sve ostale korisnike.

Kao što je rečeno, u svakoj grupi su tri bita. Prvi bit označava da li određeni korisnik, grupa ili ostali imaju pravo čitanja datoteke (ako imaju u tom slučaju piše slovo r) ili nemaju (u tom slučaju je ispisan minus). Drugo slovo označava da li imaju pravo pisanja u datoteku (postoji slovo w) ili ne (samo je minus) i konačno, treće slovo označava da li je datoteka izvršna (slovo x), tj. može li se pokrenuti kao program, ili ne (stoji samo minus).

Dakle, u navedenom primjeru, vlasnik datoteke (korisnik sgros) može čitati datoteku (prvo slovo r u grupi rw-), može pisati u nju (slovo w u grupi rw-) i ne može ju izvršavati odnosno ne radi se o izvršnoj datoteci (zadnji minus u grupi rw-). Svi članovi grupe mogu samo čitati datoteku i ne mogu pisati u nju niti ju izvršavati (jer je r-- dozvola) i, konačno, ostali mogu kao i članovi grupe samo čitati datoteku.

Treba primjetiti kako se može desiti da neka datoteka ima, primjerice, sljedeće dozvole: ---rw-r-x. U ovom slučaju, vlasnik datoteke nema nikakva prava nad datotekom (njegova grupa dozvola je ---), grupa može čitati i pisati, a svi ostali mogu čitati i izvršavati datoteku. Korisnik ako pokuša pisati u datoteku, ili je izvršavati, neće mu biti dozvoljeno. Dakle, za vlasnika se gledaju isključivo prva tri bita, za grupu druga tri bita i za sve ostale treća tri bita. Nema prenošenja od grupe na ostale, ili od korisnika na grupu pa na ostale.

Još jedna stvar koju je bitno istaknuti je da direktoriji imaju drugačije značenje bitova:
  1. Bit r označava da se može direktorij čitati, odnosno, da se može dohvatiti popis datoteka u direktoriju.
  2. Bit w označava da se u direktorij mogu dodavati nove datoteke.
  3. Bit x znači da se može pristupati metapodacima pojedine datoteke (metapodaci su veličina, blokovi na disku, itd).
Najčešći mod za direktorij je rwxr-xr-x, odnosno, rwx------ u slučaju restriktivnijih postavki. Međutim, ima i sljedeća varijanta: rwx-----x. Primjetite da se ostalima nalazi postavljen bit x, ali ne i bitovi r i w. To znači da ostali ne mogu čitati sadržaj direktorija, niti mogu mijenjati sadržaj direktorija, ali ako znaju datoteku unutar direktorija onda joj mogu pristupiti. To koriste Web poslužitelji za pristup osobnim Web stranicama korisnika.

Neke korisničke naredbe za upravljanje temeljnim dozvolama


Dozvole se mijenjaju koristenjem naredbe chmod(1):
chmod <dozvole> <datoteke i/ili direktoriji>
Prvi argument, dozvole, može biti zadan simbolički ili numerički. Kada se zadaje simbolički onda se govori koje dozvole se dodaju (ili oduzimaju) kojoj grupi korisnika. Primjerice, o+rx daje pravo čitanja i izvršavanja svima ostalima. S druge strane, ako se koristi numerički zapis, onda se zadaju apsolutne vrijednosti bitova pristupa. Primjerice, 700 će postaviti rwx------ dozvole, ili 755 će postaviti rwxr-xr-x.

Korisnici i grupe u Linux operacijskom sustavu...

Pojam korisnika (engl. user) i grupe (engl. group) u Linux operacijskom sustavu su preduvjeti za shvaćanje načina na koji OS razdvaja i kontrolira svoje korisnike i njihove objekte (procese, datoteke, dijeljenu memoriju i slično).

I grupa i korisnik na Linux OS-u (a i na bilo kojem drugom OS-u) trebaju biti kreirani kako bi ih OS poznavao. To se radi prilikom instalacije operacijskog sustava, ili ih administrator kreira prema potrebi. U trenutku kreiranja bilo korisnika bilo grupe administrator određuje korisničko ime (primjerice sgros) odnosno, ime grupe (primjerice zavod). Za korisnika, administrator mora još minimalno odrediti lozinku dok se u slučaju grupe obično još definiraju članovi grupe.

Pohranjivanje informacija o korisnicima i grupama


Popis svih korisnika na Unix operacijskim sustavima nalazi se u datoteci /etc/passwd, dok se popis svih grupa (i članova grupa) nalazi u datoteci /etc/group. Ovo vrijedi pod uvijetom da se ne koriste nekakve napredne metode autentifikacije i autorizacije u kom slučaju korisnici mogu biti definirani i na drugim mjestima.

Međutim, treba imati na umu da što se operacijskog sustava tiče, ime grupe, odnosno korisnika nisu bitni, ono što je bitno su njihovi identifikacijski brojevi. U slučaju korisnika to je UID (engl. User IDentificator) a u slučaju grupe GID (engl. Group IDentificator). Alati koji manipuliraju korisničkim imenima i grupama automatski rade translaciju iz simboličkog imena u numeričko i obratno, ovisno o potrebi.

Primjer nekoliko redaka iz datoteke /etc/passwd:
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
sgros:x:5056:1000:Stjepan Gros:/home/zavod/sgros:/bin/bash
Svaka linija definira jednog korisnika, a linije se sastoje od polja. Polja su međusobno razdvojena dvotočkom i svako polje ima točno određeno značenje:
  1. Prvo polje je korisničko ime, odnosno, simboličko ime
  2. Drugo polje je lozinka, međutim, iz sigurnosnih razloga lozinke su smještene u zasebnu datoteku kojoj je ograničen pristup.
  3. Treće polje je  UID, pa primjerice vidimo u gornjem primjeru da je prvi korisnik privilegiran, dok drugi nije.
  4. Četvrto polje je primarna grupa korisnika, i to zadana putem GID-a. Naime, svaki korisnik ima svoju primarnu grupu koja se definira u samoj /etc/passwd datoteci, ali korisnik može biti član i drugih grupa, što ćemo vidjeti u primjeru grupa.
  5. Peto polje je tzv. GECKOS polje i informativnog karaktera je. Primjerice, tamo se nalazi upisano ime i prezime korisnika.
  6. Šesto polje je matično kazalo korisnika.
  7. Sedmo polje je ljuska koju korisnik upotrebljava.
Detalje o strukturi passwd datoteke moguće je pročitati u datoteci passwd(5).

Primjer nekoliko grupa iz datoteke /etc/group:
$ cat /etc/group
root:x:0:
wbpriv:x:88:squid,apache
Opet, svaka linija definira jednu grupu, pri čemu se linije sastoje od zapisa (polja) koja su odvojena dvotočkama. Polja su:
  1. Prvo polje je ime grupe
  2. Drugo polje je grupna lozinka. Opet, iz sigurnosnih razloga smještena u zasebnu datoteku. Međutim, grupne lozinke se vrlo rijetko upotrebljavaju danas.
  3. Treće polje je GID
  4. Četvrto polje je popis korisnika članova grupa odvojenih zarezima. Primjetite da ne treba definirati člana grupe ako mu je grupa primarna. U gornjem primjeru, izgleda kao da grupa root nema ni jednog člana, međutim, korisnik root ima definiranu primarnu grupu root i na taj način on je član te grupe.
Opet, detalje je moguće pronaći u odgovarajućoj man stranici.

Kao što je mnogima poznato, na Linuxu se nalazi poseban korisnik koji ima sve ovlati, root. Međutim, preciznije je reći kako Linux posebno tretira UID 0, a ne korisničko ime. To znači da je vrlo jednostavno dodatni novo korisničko ime, podesiti mu UID na nulu i on će imati sve ovlasti kao i korisnik root.

Datotečni sustav


Svaki objekt na datotečnom sustavu ima pridruženog korisnika i grupu. Najčešće, to je korisnik koji je kreirao datoteku te je kao grupa postavljena primarna grupa tog istog korisnika. Međutim, naravno da su moguće i druge kombinacije.

Kada izlistavamo direktorij korištenjem naredbe ls(1) dobijamo odmah informaciju koji korisnik i grupa su vlasnici datoteke:
$ ls -l mozilla.pdf
-rw-r--r--. 1 sgros zemris 40360 Vel 27 21:30 mozilla.pdf
U navedenom primjeru, vlasnik datoteke mozilla.pdf je korisnik sgros, dok je grupa kojoj datoteka pripada zemris. Te dvije informacije su bitne kod određivanja prava pristupa datotekama i direktorijima (o čemu ću u zasebnom postu).

Neke korisničke naredbe za rad s korisnicima i grupama


Kako bi neki korisnik saznao svoj UID, GID i kojim grupama pripada, koristi se naredba id(1):
$ id
uid=5056(sgros) gid=1000(zemris) groups=1000(zemris),959(davfs2),968(wireshark)
Obratite pozornost da ovo nije cijeli ispis, postoji još jedan dio (context) koji je vezan uz SELinux, a koji namjerno ignoriram. Uglavnom, naredba mi kaže kako je moj UID 5056 (i korisničko ime sgros vezano uz taj UID), primarna grupa mi je zemris (čiji GID je 1000). Konačno, član sam i grupa zemris, davfs2 i wireshark.

Promjena vlasnika i grupe nekakvog datotečnog objekta (odnosno direktorija, datoteke) obavlja se korištenjem naredbi chown(1) i chgrp(1). Međutim, s obzirom da se na taj način otvaraju mogućnosti zloupotrebe, navedene naredbe može koristiti isključivo administrator sustava.

About Me

scientist, consultant, security specialist, networking guy, system administrator, philosopher ;)

Blog Archive