Dijeljenje direktorija i datoteka

linuxPrilikom rada na Linux sustavima često dolazi do potrebe da više korisnika radi na istim direktorijima i datotekama. U tom slučaju može doći do problema zbog prava pristupa postavljenim na direktorije i datoteke te njihovom vlasništvu.

Primjer bi bio kada prilikom održavanja web stranica jedan korisnik kreira datoteku, a drugi je želi promijeniti. U normalnom radu na Linux operativnom sustavu vlasnišvo i pripadna grupa nad direktorijima i datotekama se postavlja na one vrijednosti koje ima korisnik koji ih kreira. Također, inicijalna prava pisanja i čitanja datoteka se postavljaju pomoću vrijednosti umask (user mask) varijable koja je obično definirana u /etc/profiles datoteci i ta se prava ne nasljeđuju. U članku ćemo za primjer koristit direktorij /var/www.

debian#: ls -al /var/www/
total 8
drwxr-xr-x 3 root root 4096 2010-07-09 12:55 .
drwxr-xr-x 6 root root  4096 2010-07-09 12:55 ..

Vidimo da je (prazni) direktorij u vlasništvu root korisnika i njegovoj grupi i samo on ima pravo pisanja po njemu. Ako korisnik kreira datoteku i poželi je staviti unutar navedenog direktorija, to mu neće biti dozvoljeno.

Da bi se nekom korisniku omogućilo dodavanja sadržaja u određeni direktorij i njegovo mijenjanje, korisnik mora ili biti vlasnik tog direktorija ili mora pripadati grupi pod kojom se taj direktorij nalazi. Rješenje dijeljenja datoteka i direktorija između korisnika je upravo u korištenju grupa.

Umjesto kreiranja zajedničkog korisničkog računa za npr. održavanje web stranica, korisnici će koristiti svoj račun na poslužitelju, ali će biti pripadnici grupe koja ima prava pisanja. Za to je prvo je potrebno kreirati novu grupu te u nju dodati korisnike kojima treba pravo pristupa:

debian#: groupadd www-pub
debian#: usermod -a -G www-pub korisnik1
debian#: usermod -a -G www-pub korisnik2

Nakon toga treba promijeniti grupu kojoj pripada direktorij /var/www (vlasnika nećemo mijenjati, ostat će root):

debian#: chown root:www-pub /var/www

Ukoliko direktorij nije prazan, tada treba koristiti -R opciju da bi se nova grupa primijenila na čitav njegov sadržaj.
Sljedeći korak je mijenjanje prava čitanja i pisanja na cijelom sadržaju /var/www direktorija. Prije toga, kratko o samim pravima. Primjer standardnih flagova za prava je prikazan na slici i to u simboličkom, binarnom i oktalnom obliku.

 

slika1

Prava rw-r--r-- daju pravo čitanja i pisanja vlasniku datoteke, a grupi i svim ostalim korisnicima samo pravo čitanja. Osim ovih standardnih prava, postoje setuid i setgid flagovi koji omogućavaju korisnicima izvršavanje datoteka s pravima vlasnika ili grupe kojoj datoteka pripada. Kada se setuid (Set User ID) flag postavi nad datotekom, običnom se korisniku omogućava da izvrši tu datoteku pod ovlastima vlasnika te datoteke (obično root korisnika). Međutim, setgid (Set Group ID) postavljen nad direktorijima ima posve drugo značenje. On omogućava nasljeđivanje grupe na svim novim direktorijima i datotekama unutar direktorija na kojem je setgid postavljen. Setuid flag postavljen na direktorij se ignorira na Linux operativnim sustavima. Kao i ostala prava, setgid flag se postavlja naredbom chmod i to postavljanjem najznačajnijeg okteta na vrijednost 4 za setuid ili 2 za setgid. Moguća je i njihova kombinacija u obliku vrijednosti 6 (4+2). Najbolje je to pokazati primjerom. Naredba

debian#: chmod 2775 /var/www

će uz 775 prava postaviti i setgid flag (vrijednost 2), tj. postavit prava čitanja, pisanja i izvršavanja za vlasnika i grupu kojoj /var/www pripada, ali će to isto postaviti za sve buduće poddirektorije i datoteke. Znači, novi poddirektoriji i datoteke će naslijediti prava od direktorija /var/www. Opet, ako direktorij nije prazan, a naredba chmod 2775 /var/www ne razlikuje direktorije od datoteka, potrebno je posebno postaviti prava za svaki direktorij i datoteku zasebno:

debian#: find /var/www -type d -exec chmod 2775 {} \;
debian#: find /var/www -type f -exec chmod 0664 {} \;

Nakon ovoga provjerimo prava nad direktorijem /var/www:

debian#: ls -a /var/www
total 8
drwxrwsr-x 2 root www-pub 4096 2010-07-09 12:57 .
drwxr-xr-x 4 root root 4096 2010-07-09 12:57 ..

Oznaka "s" govori da je na tekućem direktoriju postavljen setgid flag te će svi novi poddirektoriji i datoteke biti u grupi www-pub.  Istu oznaku će imati svaki novi direktorij unutar /var/www, kao i prava koja su sad na direktorijem. Datoteke će imati prava -rw-rw-r--(664), dok će njihov vlasnik biti korisnik koji ih kreira.

Vratimo se na umask varijablu. Standardna umask vrijednost jest 022, što znači da će novokreirani direktoriji imati prava 755, a datoteke 644. Da bi zadržali dodjeljivanje ispravnih prava (775 za direktorije i 664 za datoteke), trebamo promijeniti defaultni umask. Već smo rekli da se ta vrijednost obično postavlja u /etc/profiles datoteci i ona vrijedi za sve korisnike. Nova vrijednost treba biti 0002. Međutim, ako želimo promijeniti umask samo za neke korisnike, tada to trebamo napraviti na drugi način. Za svakog korisnika kojem želimo promijeniti umask vrijednosti treba unutar njegovog /home direktorija u .bashrc datoteci dodati redak "umask 0002".  Za slučaj da se datoteke prebacuju na poslužitelj FTP-om, u konfiguraciji samog FTP servisa isto tako treba promijenti umask vrijednost u navedenu (0002) jer FTP servis također postavlja prava nad datotekama prilikom njihovog prebacivanja na poslužitelj. Ako je na poslužitelj instaliran proftpd, onda se ta vrijednost nalazi u /etc/proftpd/proftpd.conf datoteci tj. /etc/vsftpd.conf za slučaj da se koristi vsftpd.

Kuharice: 
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)