V unixových systémoch sú nad jednotlivými komponentmi (napr. nad jednotlivými položkami v súborovom systéme) definované tri základné prístupové práva:
r
-- read
w
-- write
x
-- execute
Presná interpretácia týchto práv môže byť rôzna, podľa toho o aký komponent OS sa jedná. V súborovom systéme sa tieto práva interpretujú nasledovne:
r
-- Čítanie obsahu súboru. Bez tohto práva
nedovolí OS čítať obsah súboru.
w
-- Modifikácia obsahu súboru. Bez tohto práva
nedovolí OS zapisovať do súboru.
x
-- Vykonanie súboru. Bez tohto práva nedovolí
OS súbor vykonať (spustiť).
r
-- Čítanie obsahu adresára. Bez tohto práva
nedovolí OS vylistovať položky v adresári.
w
-- Modifikácia obsahu adresára. Bez tohto
práva nedovolí OS pridávať alebo mazať položky adresára.
x
-- Change directory. Bez tohto práva nedovolí
OS nastaviť adresár ako aktuálny pracovný adresár.
Pre rôzne komponenty systému sú definované aj ďalšie typy prístupových práv.
Pri základnej správe prístupových práv sú nad každou položkou OS definované tri skupiny používateľov:
u
-- user, vlastník položky v
OS. Väčšinou je to id používateľa, ktorý súbor alebo adresár
vytvoril.
g
-- group, skupina viacerých
používateľov. Každý používateľ môže byť členom jednej
alebo viacerých skupín.
o
-- others, ostatní používatelia,
ktorí nepatria do predchádzajúcich dvoch skupín.
Pre každú skupinu používateľov môže byť nad jednotlivými položkami definovaná samostatná sada prístupových práv. Takýmto spôsobom je možné spolu s nastavením vlastníka a skupiny definovať rôzne práva pre rôznych používateľov. Sada prístupových práv je reprezentovaná bitovou maskou.
Vlastníka, skupinu a prístupové práva v súborovom systéme je na
príkazovom riadku možné zistiť pomocou príkazu ls
s prepínačom -l
:
$> ls -l /etc/passwd /dev/ttyS0 /sbin/reboot crw-rw---- 1 root dialout 4, 64 Jun 17 08:55 /dev/ttyS0 -rw-r--r-- 1 root root 1673 Feb 26 10:33 /etc/passwd -rwxr-xr-x 1 root root 13848 Jan 18 2013 /sbin/reboot
Znaky 2 až 10 v predchádzajúcom výpise indikujú prístupové práva na vypísaných položkách. Znaky 2, 3 a 4 sú práva vlastníka, 5, 6 a 7 sú práva skupiny a 8, 9, 10 sú práva ostatných.
Prístupové práva v súborovom systéme je možné meniť pomocou príkazu chmod nasledovne:
chmod mode <cesta1> [cesta2] ... [cestaN]
Parameter mode
môže byť dvojaký:
Pri použití bitovej masky sú existujúce prístupové práva úplne
nahradené novou sadou prístupových práv pre všetky skupiny používateľov.
Maska pozostáva z číslic v osmičkovej sústave, pričom každá číslica
nastavuje práva pre jednotlivé skupiny používateľov v poradí u
,
g
a o
. Jednotlivé práva r
,
w
a x
sú reprezentované bitmi 2
,
1
a 0
t.j.:
právo |
r |
w |
x |
---|---|---|---|
bit |
2 |
1 |
0 |
mocnina |
2^2 |
2^1 |
2^0 |
hodnota |
4 |
2 |
1 |
Jednotlivé hodnoty masky sú vytvorené sčítaním hodnôt pre príslušne bity:
r |
w |
x |
hodnota |
poznámka |
|||
---|---|---|---|---|---|---|---|
0 |
+ |
0 |
+ |
0 |
= |
0 |
žiadne práva |
0 |
+ |
0 |
+ |
1 |
= |
1 |
iba execute |
0 |
+ |
2 |
+ |
0 |
= |
2 |
iba write |
0 |
+ |
2 |
+ |
1 |
= |
3 |
write a execute |
4 |
+ |
0 |
+ |
0 |
= |
4 |
iba read |
4 |
+ |
0 |
+ |
1 |
= |
5 |
read a execute |
4 |
+ |
2 |
+ |
0 |
= |
6 |
read a write |
4 |
+ |
2 |
+ |
1 |
= |
7 |
read, write a execute |
Celková maska pre používateľov je zostavená aspoň z troch číslic. Napríklad:
u |
g |
o |
poznámka |
---|---|---|---|
0 |
0 |
0 |
Nikto nemá žiadne práva |
4 |
0 |
0 |
Vlastník má práva na čítanie ostatní žiadne práva |
7 |
5 |
0 |
Vlastník má všetky práva, skupina má práva read a execute, ostatní žiadne práva |
7 |
7 |
7 |
Všetci majú všetky práva |
Vplyv nastavenia prístupových práv na súboroch, ich odobratie a pridelenie si vyskúšate nasledovne:
Cvičenie
Zmente aktuálny pracovný adresár:
$> cd ~/os/cv01
Cvičenie Vytvorte súbor
file.txt
a odoberte všetkým všetky prístupové práva:
$> echo "blabla" > file.txt $> chmod 000 file.txt $> ls -l file.txt ---------- 1 user user 7 Jun 17 16:57 file.txt
Cvičenie Vyskúšajte prečítať obsah súboru:
$> cat file.txt cat: filetxt: Permission denied
Cvičenie Operačný systém zabránil procesu bežiacemu pod vašim používateľským účtom aby prečítal obsah súboru, pretože nemáte príslušné právo. Teraz si právo na čítanie pridajte a skúste prečitať obsah súboru:
$> chmod 400 file.txt $> ls -l file.txt -r-------- 1 user user 7 Jun 17 16:57 file.txt $> cat file.txt blabla
Cvičenie Teraz skúste zmeniť obsah súboru:
$> echo "bleble" > file.txt bash: file.txt: Permission denied
Cvičenie Prideľte si právo na zápis do súboru a skúste zmeniť jeho obsah:
$> chmod 600 file.txt $> ls -l file.txt -rw------- 1 user user 7 Jun 17 16:57 file.txt $> echo "bleble" > file.txt $> cat file.txt bleble
Spustenie súboru a pridelenie príslušných práv bude predmetom niektorého z ďalších cvičení.
Vplyv jednotlivých práv na adresároch si vyskúšate nasledovne:
Cvičenie
Vytvorte adresár
testdir
a odoberte všetkým všetky prístupové práva:
$> mkdir testdir $> chmod 000 testdir $> ls -ld testdir d--------- 1 user user 6 Jun 17 16:57 testdir
Cvičenie Skúste vypísať obsah vytvoreného adresára:
$> ls testdir/ ls: cannot open directory testdir/: Permission denied
Cvičenie Operačný systém opäť zabránil procesu, vykonávanému pod vaším používateľským účtom, vykonať operáciu, na ktorú nemáte príslušné prístupové právo.
Prideľte si právo
r
, a opäť skúste vypísať obsah adresára:
$> chmod 400 testdir $> ls -ld testdir dr-------- 1 user user 6 Jun 17 16:57 testdir $> ls testdir/
Cvičenie Teraz vyskúšajte zmeniť obsah adresára; vytvorte v adresári nový súbor:
$> touch testdir/file touch: cannot touch `testdir/file': Permission denied
Cvičenie Prideľte si právo
w
a skúste znova:
$> chmod 600 testdir $> ls -ld testdir drw------- 1 user user 6 Jun 17 16:57 testdir $> touch testdir/file $> ls testdir/ file
Cvičenie Teraz vyskúšajte zmeniť aktuálny pracovný adresár:
$> cd testdir/ bash: cd: testdir/: Permission denied
Cvičenie Prideľte si právo
x
a zopakujte predchádzajúci príkaz:
$> chmod 700 testdir $> ls -ld testdir drwx------ 1 user user 6 Jun 17 16:57 testdir $> cd testdir/ $> pwd /home/pouzivatel/os/cv01/testdir
V mnohých situáciách potrebujeme iba upraviť existujúce práva,
bez zmeny ostatných: napríklad prideliť vlastníkovi práva na zápis,
odobrať ostatným práva na čítane a pod. V takomto prípade je možné
parameter mode
zadať ako trojicu znakov z nasledujúcich
možností:
sada |
zmena |
právo |
---|---|---|
u |
r |
|
g |
+[a] |
w |
o |
-[b] |
x |
a[c] |
||
[a] Pridať právo [b] Odobrať právo [c] All -- všetci (vlastník, skupina, ostatní) |
Napriklad:
# vlastnikovi prida pravo na zapis $> chmod u+w file $> ls -l file # ostatnym prida pravo na citanie $> chmod o+r file $> ls -l file # vsetkym odoberie pravo na spustenie $> chmod a-x file $> ls -l file
Vlastníka a skupinu položky v súborovom systéme je možné zmeniť pomocou príkazu chown:
chown [uid][:gid] file
Hodnoty uid
a gid
môžu byť zadané ako numerické
identifikátory používateľa resp. skupiny alebo aj ako symbolické
názvy (prihlasovacie meno a názov skupiny). Napríklad:
# novým vlastníkom súboru sa stane používateľ s /uid/ 1001 $> chown 1001 file # novým vlastníkom súboru sa stane používateľ s /loginom/ bob $> chown bob file # zmena vlastníka aj skupiny $> chown bob:studenti file
![]() |
Dôležité |
---|---|
Unixové systémy z bezpečnostných dôvodov väčšinou neumožňujú
bežným používateľom priamo odovzdať súbory
iným používateľom bez ich zásahu, t.j. zmeniť vlastníka súboru.
Preto príkaz |
![]() |
Tip |
---|---|
Ak chcete súbor alebo adresár dať k dispozícií inému používateľovi, môžte na to použiť dočasný adresár. |
Iba skupinu položky v súborovom systéme je možné zmeniť pomocou príkazu chgrp:
chgrp gid file
Hodnota gid
môže byť opäť zadaná ako číselný identifikátor
alebo názov skupiny. Napríklad:
$> chgrp studenti file
![]() |
Dôležité |
---|---|
Bežný používateľ systému môže z bezpečnostných dôvodov súboru priradiť iba jednu zo skupín, ktorej je členom. |