Pristup resursima pod mrežnim operativnim sistemima (kao što je i Linux) je strogo kontrolisan. Fajl sistem je fundamentalni resurs svake radne stanice ili servera, a kontrola pristupa fajlovima i direktorijumima (dodela ovlašćenja za pristup i zaštita od neovlašćenog pristupa) ključna komponenta ozbiljnih zaštitnih polisa u svakom višekorisničkom sistemu.
Jedna od najznačajnijih komponenti svake ozbiljne zaštitne politike je kontrola pristupa na nivou fajl sistema. Kontrolom pristupa na nivou fajl sistema određuju se:
Kontrola pristupa na nivou fajl sistema zasniva se na vlasničkim odnosima, odnosno vlasništvu nad objektima (pripadnost objekta korisnicima i grupama) i pravima pristupa. Prava pristupa se dodeljuju svakom fajlu i direktorijumu. Prava pristupa za datoteke i direktorijume najlakše se mogu odrediti pomću komande ls (list) sa parametrom -l (long), kao što je prikazano u sledećem primeru:
Pravo pristupa za svaku grupu se zadaje na isti način, sa istim rasporedom karaktera rwx:
Ukoliko se na odgovarajućoj poziciji nalazi crtica -, pravo je ukinuto.
Primer:
$ ls -la ~/a.txt
-rw-rw-r-- 1 marko marko 161 окт 3 23:43 /home/marko/a.txt
$ ls -ld /bin /root
drwxr-xr-x 2 root root 4096 нов 19 03:41 /bin
drwx------ 4 root root 4096 сеп 26 22:51 /root
Na primer, sistemski direktorijum /bin sadrži najčešće korišćene UNIX komande. Svim korisnicima sistema dato je pravo korišćenja direktorijuma /bin. Svi korisnici sistema mogu da se pozicioniraju na direktorijum, mogu da pročitaju sadržaj i pokrenu komande koje se u njemu nalaze. Pravo upisa dato je jedino superuser-u.
Drugo, sistemski direktorijum /root je home direktorijum superusera, koji nad njim ima sva prava, dok je svim ostalim korisnicima pristup direktorijumu zabranjen.
Značenje prava za fajlove i direktorijume bitno se razlikuje, što je prikazano u sledećoj tabeli:
pristupna prava za fajlove | pristupna prava za direktorijume | |
---|---|---|
read (r) | Korisnik može pročitati sadržaj fajla, odnosno može prikazivati fajl na ekranu, štampati ga ili kopirati; | Korisnik može pročitati sadržaj direktorijuma, što znači i da korisnik može da izvrši komandu ls. Napomena: za prikazivanje detaljnog listinga direktorijuma (ls -l) neophodno je i x pravo nad direktorijumom |
write (w) | Korisnik može modifikovati sadržaj fajla. Napomena: može obrisati fajl samo ako mu je dato pravo upisa nad roditeljskim direktorijumom; |
Korisnik može modifikovati sadržaj direktorijuma, odnosno dodavati nove fajlove i brisati postojeće, kreirati i brisati poddirektorijume. Napomena: može obrisati direktorijum samo ako mu je dato pravo upisa nad roditeljskim direktorijumom; |
execute (x) | Korisnik može izvršavati fajl, pod uslovom da se radi o shell programu ili o fajlu u binarnom izvršnom formatu; | Korisnik se može pozicionirati na direktorijum (komandom cd), može prikazivati dugački listing (ls -l) sadržaja i pretraživati direktorijum (find). |
Svim fajlovima i direktorijumima dodeljen je korisnički identifikator (UID) i grupni identifikator (GID) vlasnika. Kernel razrešava vlasničke odnose na osnovu ovih identifikatora.
$ ls -ln
-rw-rw-r-- 1 859 861 20 dec 23 14:04 kyuss
-rw-rw-r-- 1 859 861 20 dec 23 15:20 stoner
$ id
uid=859(nm) gid=861(nm) groups=861(nm),0(root)
Napomena: Opcija -n komande ls daje numeričke vrednosti za UID i GID.
Prava pristupa mogu promeniti isključivo vlasnici fajlova i direktorijuma, dok root kao superuser može da promeni pristupna prava svakom objektu. Komanda chmod može se pokrenuti u simboličkom (relative) ili oktalnom (absolute) režimu.
Korisnik dodeljuje ili oduzima prava u odnosu na postojeća, dok se postojeća prava koja nisu specificirana argumentom komande ne menjaju. Format komande u simboličkom modu je:
$ chmod [-R] symbolic_mode[,...] objectname
Primer:
$ chmod u=rwx myscript
symbolic_mode sastoji se od tri komponente:
Primeri:
$ touch myfile
$ ls -l myfile
-rw-rw-r-- 1 marko marko 0 нов 19 18:28 myfile
kreira fajl i lista prava
$ chmod go+w myfile
$ ls -l myfile
-rw-rw-rw- 1 marko marko 0 нов 19 18:28 myfile
dodata prava upisa kategorijama group i other
$ chmod u-w myfile
$ ls -l myfile
-r--rw-rw- 1 marko marko 0 нов 19 18:28 myfile
oduzeto pravo upisa vlasniku
$ chmod u=rw,go-w myfile
$ ls -l myfile
-rw-r--r-- 1 marko marko 0 нов 19 18:28 myfile
dodeljen skup prava rw vlasniku i ukinuto pravo upisa kategorijama group i others
$ chmod a= myfile
$ ls -l myfile
---------- 1 marko marko 0 нов 19 18:28 myfile
svima ukinuta sva prava.
Parametar -R se koristi za rekurzivnu promenu pristupnih prava direktorijuma i svih objekata (poddirektorijuma i fajlova) koji se u njemu nalaze. Ukoliko se navede parametar -R, argument objectname mora biti direktorijum.
Primer:
$ ls -ld parent_dir
drwxr-xr-x 2 nm nm 4096 Apr 28 09:10 parent_dir
$ ls -l parent_dir
parent_dir:
total 0
-rw-r--r-- 1 nm nm 0 Apr 28 09:09 dir1
-rw-r--r-- 1 nm nm 0 Apr 28 09:10 dir2
-rw-r--r-- 1 nm nm 0 Apr 28 09:09 file1
-rw-r--r-- 1 nm nm 0 Apr 28 09:09 file2
$ chmod -R o-rx parent_dir
$ ls -ld parent_dir
drwxr-xr-x 2 nm nm 4096 Apr 28 09:10 parent_dir
$ ls -l parent_dir
parent_dir:
total 0
-rw-r--r-- 1 nm nm 0 Apr 28 09:09 dir1
-rw-r--r-- 1 nm nm 0 Apr 28 09:10 dir2
-rw-r--r-- 1 nm nm 0 Apr 28 09:09 file1
-rw-r--r-- 1 nm nm 0 Apr 28 09:09 file2
Komandom chmod u oktalnom režimu dodeljuju se prava pristupa svim vlasničkim kategorijama istovremeno. Prava koja korisnik navede kao argument komande eksplicitno zamenjuju postojeća prava (prethodna prava se ne prolongiraju), tako da se ovaj režim naziva apsolutnim. Komanda zatheva da se u ovom režimu kao argument navedu tri oktalne cifre od kojih svaka predstavlja prava pristupa za jednu vlasničku kategoriju.
Moguće oktalne vrednosti sa odgovarajućim pravima opisane su sledećom tabelom:
Oktalna vrednost | Suma prava po binarnoj vrednosti | Odgovarajuća prava | Definicaj |
---|---|---|---|
7 | 4 + 2 + 1 | r w x | čitanje, izmena i izvršavanje |
6 | 4 + 2 + 0 | r w - | čitanje i izmena |
5 | 4 + 0 + 1 | r - x | čitanje i izvršavanje |
4 | 4 + 0 + 0 | r - - | čitanje |
3 | 0 + 2 + 1 | - w x | izmena i izvršavanje |
2 | 0 + 2 + 0 | - w - | izmena |
1 | 0 + 0 + 1 | - - x | izvršavanje |
0 | 0 + 0 + 0 | - - - | bez prava pristupa |
Sintaksa komande chmod u oktalnom režimu je slična sintaksi komande u simboličkom režimu:
$ chmod [-R] absolute_mode objectname
Apsolutna prava formiraju se pomoću tri oktalne cifre kojima su predstavljena prava pristupa za vlasnika, grupu i ostatak sveta. Parametar -R se, kao i u simboličkom režimu, koristi za rekurzivnu promenu pristupnih prava direktorijuma i svih objekata koji se u njemu nalaze. U tom slučaju argument objectname mora biti direktorijum.
Napomena: Kada se koristi oktalni režim moraju se navesti sve tri oktalne cifre u tačnom redosledu (vlasničko pravo, grupno pravo, pravo za ostatak sveta).
$ ls -l betatest
-rw-rw-rw- 1 nm nm 0 dec 23 15:25 betatest
$ chmod 555 betatest
$ ls -l betatest
-r-xr-xr-x 1 nm nm 0 dec 23 15:25 betatest
$ ls -l denywrites
-rwxrwxrwx 1 nm nm 0 dec 23 15:25 denywrites
$ chmod 755 denywrites
$ ls -l denywrites
-rwxr-xr-x 1 nm nm 0 dec 23 15:25 denywrites
UNIX postavlja inicijalne vlasničke odnose prilikom kreiranja fajla ili direktorijuma. Korisnik koji kreira objekat postaje njegov vlasnik, a objekat se formalno pridružuje primarnoj grupi vlasnika.
Komandom chown (change owner) root kao superuser može da promeni vlasnika objekta, a ukoliko konkretan sistem to dozvoljava, to može učiniti i vlasnik. Regularni korisnici Linux sistema mogu promeniti vlasničke odnose samo ako na sistemu nije aktiviran mehanizam disk kvote (disk quota), kojim se korisnicima ograničava iskorišćenje prostora na diskovima. Kada se za fajl promeni vlasništvo, prava pristupa starog vlasnika određena su kategorijama group i others. Sledeće komande prikazuju sintaksu za promenu vlasništva:
$ chown [-R] new_owner objectname
Primer:
$ whoami
nm
$ ls -l myfile
-rw-r--r-- 1 nm nm 0 Apr 28 12:07 myfile
$ chown jsmith myfile
chown: changing ownership of `myfile`: Operation not permitted
$ su
Password: ******
# chown jsmith myfile
# exit
exit
$ ls -l myfile
-rw-r--r-- 1 jsmith nm 0 Apr 28 12:07 myfile
Pored osnovnih dozvola, postoje i tri bita informacija definisanih ya fajlove na UNIX sistemima:
Oktalna vrednost | Binarna vrednost | Značenje |
---|---|---|
0 | 000 | setuid, setgid, sticky bit nisu postavljeni |
1 | 001 | sticky bit postavljen |
2 | 010 | setgid postavljen |
3 | 011 | setgid i sticky bit postavljeni |
4 | 100 | setuid postavljen |
5 | 101 | setuid i sticky bit postavljeni |
6 | 110 | setuid i setgid postavljeni |
7 | 111 | setuid, setgid, sticky bit i postavljeni |
$ ls -l
total 8
-rwxr--r-- 1 root root 104 Aug 19 01:26 hello.sh
$ chmod u+s hello.sh
$ ls -l
total 8
-rwsr--r-- 1 root root 104 Aug 19 01:26 hello.sh
$ ls -l
total 8
-rwxr--r-- 1 root root 104 Aug 19 01:26 hello.sh
$ chmod 4744 hello.sh
$ ls -l
total 8
-rwsr--r-- 1 root root 104 Aug 19 01:26 hello.sh
$ ls -ld /javaproject
drwxrwxr-x 2 root javaproject 4096 Aug 19 02:33 /javaproject
$ chmod g+s /javaproject
$ ls -ld /javaproject
drwxrwsr-x 2 root javaproject 4096 Aug 19 02:33 /javaproject
[jones@redhat-server ~]$ touch /javaproject/jones1.txt
[jones@redhat-server ~]$ mkdir /javaproject/jones1dir
[jones@redhat-server ~]$ ls -l /javaproject/
total 12
drwxrwsr-x 2 jones javaproject 4096 Aug 19 02:38 jones1dir
-rw-rw-r-- 1 jones javaproject 0 Aug 19 02:37 jones1.txt
$ ls -ld /shared/
drwxrwxr-x 2 root adm 4096 Aug 19 02:47 /shared/
$ chmod 2775 /shared/
$ ls -ld /shared/
drwxrwsr-x 2 root adm 4096 Aug 19 02:47 /shared/
$ ls -ld /tmp/
drwxrwxrwt 4 root root 4096 Aug 19 02:29 /tmp/
$ chmod o-t dir1
$ ls -l
total 8
drwxr-xr-x 2 root root 4096 Aug 19 03:08 dir1
$ chmod o+t dir1
$ ls -l
total 8
drwxr-xr-t 2 root root 4096 Aug 19 03:08 dir1
$ chmod 1777 dir1/
$ ls -l
total 8
drwxrwxrwt 2 root root 4096 Aug 19 03:08 dir1