Portál AbcLinuxu, 27. dubna 2024 06:26

Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)

30. 11. 2009 | David Watzke
Články - Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)  

Tento díl je o přístupových právech v Unixu a o nástrojích pro manipulaci s nimi (chmod, chown, chgrp).

Obsah

Jelikož jsou unixové systémy víceuživatelské, je zde nutnost nějakého systému přístupových práv, aby uživatelé nemohli přistupovat k citlivým datům jiných uživatelů, páchat škodu na systému a tak podobně. Standard POSIX definuje systém oprávnění, který používají všechny unixové systémy.

Základní unixová přístupová práva

link

Každý soubor či adresář má svá základní oprávnění. To zahrnuje vlastníka (UID) a skupinu (GID), a dále oprávnění ke čtení (read), zápisu (write) a spuštění (execute) pro vlastníka (user), skupinu (group) a ostatní uživatele (others). Význam tučných písmen je dobré si zapamatovat, nejen proto, že je budeme používat dále v článku.

PrávoVýznam u souboruVýznam u adresáře
r Čtení souboru. Čtení názvů obsažených položek.
w Zápis do souboru. Vytváření souborů a adresářů.
x Spuštění souboru. Vstup do adresáře.

Samotný popis je pro nezasvěceného patrně složité pochopit, a proto to předvedu na ukázce. Již ve druhém díle jsme si představili příkaz ls, který nám teď pomůže s vypsáním a pochopením práv. Vypíšeme si adresář s různými soubory, které mají různá práva.

$ ls -lF --color=auto
brw-rw---- 1 root root    7, 0 2009-11-08 14:41 blokove_zarizeni
-rw------- 1 dave home      16 2009-11-08 14:34 muj_tajny_soubor.txt
prw-r--r-- 1 dave home       0 2009-11-08 14:43 pojmenovana_roura|
drwxr-xr-x 1 dave home       0 2009-11-08 14:37 prazdny_adresar/
-rwxr-xr-x 1 dave home 5558272 2009-11-08 14:37 spustitelny_soubor*
lrwxrwxrwx 1 dave home      20 2009-11-08 14:35 symlink_na_muj_tajny_soubor -> muj_tajny_soubor.txt
srwxr-xr-x 1 dave home       0 2009-11-08 17:34 unixovy_socket=
crw-rw-r-- 1 root root    5, 2 2009-11-08 14:41 znakove_zarizeni

Zajímají nás teď především první tři sloupce. V prvním sloupci jsou vypsána oprávnění. První znak udává typ souboru (* to si vysvětlíme později, s právy to nesouvisí). Další tři znaky znázorňují oprávnění pro vlastníka, následující tři pro skupinu a poslední tři pro ostatní uživatele. Ve druhém sloupci je uvedeno jméno vlastníka a ve třetím potom název skupiny.

Co vlastně jednotlivé znaky u oprávnění znamenají, vysvětlím třeba na adresáři nazvaném prazdny_adresar. Když ignorujeme první znak, máme rwxr-xr-x. To si můžeme představit rozdělené po třech znacích jako rwx,r-x,r-x, tedy vlastník,skupina,ostatní. Znaky r, w, x mají již popsaný význam a spojovník (-) znamená, že dané právo adresář nemá. Vlastník může s adresářem manipulovat, jak chce (rwx), zatímco skupina a ostatní do něj mohou jen vstoupit a vypsat si jeho obsah (r-x).

PrávoHodnota
r-- 4
-w- 2
--x 1

Další důležitá věc je vyjádření práv v osmičkové číselné soustavě. Vizte tabulku. Například rw- lze zapsat jako 6, protože jednotlivá čísla se sčítají. Z toho vyplývá, že 3 je -wx, 5 je r-x a 7 je rwx.

Základní oprávnění souboru či adresáře lze tedy vyjádřit trojciferným číslem, přičemž první číslo udává práva vlastníka, druhé skupiny a třetí ostatních uživatelů. Například pro spustitelné soubory se často používá 755, tedy rwxr-xr-x – vlastník má neomezená práva a ostatní mohou soubor jen číst nebo spustit.

Je důležité uvědomit si, že vlastník své soubory může smazat, i když k nim nemá právo zápisu (w). Třeba příkaz rm se sice standardně při pokusu o smazání zeptá, nicméně lze to a jiné programy se ptát nemusí. Další výjimka je ta, že superuživatel (root) má ke všem souborům právo minimálně rw- (6), a to i v případě, kdy logicky spadá do skupiny s právy --- (0).

Tolik tedy k právům. Co se týče příkazu ls a záhadného prvního písmena v prvním sloupci na začátku každého řádku jeho výpisu (*), jednotlivé znaky mají následující význam:

ZnakVýznamČeho je znak zkratkou
- obyčejný soubor -
b soubor blokového zařízení block device
c soubor znakového zařízení character device
d adresář directory
l symbolický odkaz symbolic link
p pojmenovaná roura named pipe
s unixový socket unix socket

chmod

link

Program chmod (zkratka angl. change mode, tedy změnit práva) slouží ke změně oprávnění souborů a adresářů.

# nastaví práva souboru "skript.sh" na 755 (rwxr-xr-x)
chmod 755 skript.sh

Při vysvětlování práv výše jsem psal, že je dobré pamatovat si tučné zkratky, tak si v případě potřeby osvěžte, co znamená user, group a others. Jiný způsob, jak u souboru změnit práva, totiž využívá právě těchto zkratek a kombinace písmen r, w, x. Následuje ukázka, na které tento způsob předvedu.

chmod u+x soubor.run

Písmeno u signalizuje, že měnit se budou práva vlastníka. Znak + znamená, že práva se budou přidávat (- práva odebírá a = přiřazuje). Další znaky (v tomto případě jen x) symbolizují práva, která se budou měnit. Příkaz tedy přidává vlastníkovi právo ke spuštění souboru s názvem soubor.run.

# nastaví skupině rwx (7) pro „soubor.txt“
chmod g+rwx soubor.txt

# pokud měl soubor práva 777, po tomto příkazu budou 640
chmod u-x,g-wx,o-rwx "soubor s mezerami v nazvu"

# nastaví práva 764 souboru „filename.ext“
chmod u=rwx,g=rw,o=r filename.ext

Jediným standardizovaným přepínačem příkazu chmod je -R, který slouží k rekurzivní změně práv.

# nastaví adresáři „adresar“ a veškerému jeho obsahu práva 755
chmod -R 755 adresar/

# odebere vlastnící skupině právo k zápisu do adresáře „x“ a jeho obsahu
chmod -R g-w "x"

Zde se hodí upozornit, že chmod s přepínačem -R dovede (především spuštěný pod rootem) velice snadno znehodnotit systém, a to takovým způsobem, že je pak podstatně jednodušší systém smazat a nainstalovat jej znova (či v lepším případě obnovit jej ze zálohy), než se pokoušet katastrofu napravit. Pozor si dávejte zvlášť při zadávání absolutních cest, protože největší škodu by příkaz napáchal logicky tehdy, dostal-li by kořenový adresář (/) jako argument.

GNU verze příkazu má oproti standardu navíc několik dalších praktických přepínačů. Dva ovlivňující výpis programu:

# -v vypíše informace o každém zpracovaném souboru
 chmod -v 755 a b c
mode of `a' changed to 0755 (rwxr-xr-x)
mode of `b' changed to 0755 (rwxr-xr-x)
mode of `c' changed to 0755 (rwxr-xr-x)

# -c je jako -v, ale vypisuje info jen tehdy, změní-li se práva a
# následující příkaz tedy nevypíše nic (práva všech souborů již jsou 755)
chmod -c 755 a b c

Dále je zde přepínač --reference, díky kterému můžeme místo konkrétních práv zadat cestu k souboru, jehož práva budou použita

# nastaví adresáři „dir“ práva kořenového adresáře
chmod --reference=/ "dir"

Přepínač --preserve-root nedovolí spustit příkaz v rekurzivním režimu na kořenový adresář. Pozor, na rozdíl např. od rm je u chmodu výchozí chování takové, jako by byl zadán přepínač --no-preserve-root.


chown

link

Příkaz chown slouží ke změně vlastníka a skupiny souborů a adresářů. Název je zkratkou anglického change owner, tedy změnit vlastníka.

# změní vlastníka souboru „soubor.txt“ na „jmeno_uzivatele“
chown jmeno_uzivatele soubor.txt

# změní vlastníka souboru „soubor.txt“ na „dave“ a skupinu na „home“,
# oddělovač vlastníka a skupiny může být znak : nebo .
chown dave:home "soubor.txt"

Místo jména vlastníka a skupiny lze zadat také číslo vlastníka (UID) či skupiny (GID).

Existují ještě další dvě zvláštní použití.

# změní skupinu souboru „soubor.txt“ na „www“
chown :www soubor.txt

# změní vlastníka souboru „x“ na "admin" a
# změní skupinu na implicitní skupinu uživatele „admin“
chown admin: x

# toto nefunguje, protože tento formát zápisu je platný
# jen tehdy, když zadáte jméno uživatele (a ne UID)
chown 1000: x
chown: invalid spec: `1000:'

Co se týče přepínačů, je na tom chown podobně jako výše popisovaný chmod, tedy -R je standardní přepínač aktivující rekurzivní režim a společná GNU rozšíření jsou také stejná. Příkaz chown má ale ještě další standardní i GNU přepínače.

# nastaví adresářům „a“, „b“, „c“ a jejich obsahu
# vlastníka „dave“ a skupinu „home“ a navíc vypíše
# informaci o každém změněném souboru či adresáři
chown -c -R dave:home a b c

Standardní přepínač -h zakáže následování symbolických odkazů (symlinků) a mění přímo jejich vlastnictví (na systémech, kde to je podporováno – obvykle to smí provádět pouze root). Dále jsou zde standardní přepínače ovlivňující chování rekurzivního režimu (-R), a těmi jsou -H, -L-P. Přepínač -H způsobí následování symlinku zadaného na příkazovém řádku. Je-li zadán přepínač -L a program narazí na symlink odkazující na adresář, spustí rekurzi na odkazovaný adresář. Přepínač -P neprochází žádné symlinky. Standard neudává, které chování se má použít jako výchozí, ale GNU používá -P.

Užitečný při rekurzivní změně vlastnictví může být také GNU přepínač --from, jemuž jako argument zadáte vlastníka a skupinu a chown pak mění vlastnictví jen u těch souborů, které odpovídají hodnotám zadaným přepínači --from.

# rekurzivně změní vlastnictví všech položek v adresáři „/home/petr“,
# které mají vlastníka „dave“ a skupinu „home“ na vlastníka „petr“ a skupinu „users“
chown -R --from=dave:home petr.users /home/petr

# rekurzivně změní vlastnictví všech položek v adresáři „/home/dave“,
# které mají vlastníka „dave“ na „petr“ s jeho implicitní skupinou
chown -R --from=dave petr: /home/petr/docs

chgrp

link

Příkaz chgrp slouží ke změně vlastnické skupiny souborů a adresářů. Název vychází z anglického výrazu change groupzměnit skupinu.

# nastaví souboru „x“ skupinu „home“
chgrp home x
# téhož lze docílit pomocí:
chown :home x

Program má (až na absenci --from) stejné standardní i GNU přepínače jako výše popisovaný chown.

# změní skupinu aktuálního adresáře a jeho obsahu na „users“
chgrp -R users .

# totéž jako předchozí, ale navíc informuje o provedených změnách
chgrp -cR users .

Seriál Unixové nástroje (dílů: 27)

První díl: Unixové nástroje – 1 (úvod, cat, head, tail), poslední díl: Unixové nástroje – 26 (triky pro práci v Bashi).
Předchozí díl: Unixové nástroje – 4 (mkdir, rmdir, cd, pwd)
Následující díl: Unixové nástroje – 6 (touch, du, file)

Související články

Seriál: BASH
Regulární výrazy
Bash: chytré doplňování

Odkazy a zdroje

Wikipedia: chmod
Wikipedia: chown
Wikipedia: chgrp

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

Diskuse k tomuto článku

brk avatar 30.11.2009 06:26 brk | skóre: 29 | blog: broukoviny
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Odpovědět | Sbalit | Link | Blokovat | Admin
Pěkný stručně a jasně popsaný úvod do problematiky práv. Jen je škoda, že nešel o chlup víc do hloubky. Třeba nezahrnuje dědičnost, např. viz dotaz zde z poradny: Linux, práva, dědičnost.
USE="-qt -kde"
30.11.2009 08:19 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Jo, já bych jedním šmahem vzal minimálně setuid/gid/sticky, ne-li ACL.
In Ada the typical infinite loop would normally be terminated by detonation.
30.11.2009 16:36 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
A pridať chattr. A tiež odstavec o tom, čo z toho a ako funguje na moderných systémoch oproti systémom starším (resp. unixovým, ale nie linuxovým).

Vždy sa dá ísť do ďalších a ďalších podrobností (napr. fungovanie na rôznych filesystémoch).
30.11.2009 17:44 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Pánové, nic vám nebrání přidat ještě jeden podrobnější díl o právech. Rád jej vydám. Jsem však rád, že tento článek nezabíhal do přílišných detailů, aby to zůstalo stručné a stravitelné i pro neznalé.
Fill avatar 30.11.2009 07:51 Fill | skóre: 19 | blog: Fill | Třebíč
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Odpovědět | Sbalit | Link | Blokovat | Admin
Ještě bych zmínil u chmod velice užitečný přepínač +X, který přidává příznak spustitelnosti pouze adresářům, takže můžete jedním příkazem rekurzivně zpřístupnit celý strom, aniž byste všechny soubory změnili na spustitelné (popř. museli použít složitější konstrukci s find).
♡ Všechna bezpráví vyhlazena., Sociální síť, Rádio, Profil, Skripty na bitcoin mikrodary, titulky, YFiaS
30.11.2009 12:17 Radek Hladik | skóre: 20
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
+X přidá x právo nejen dresářům, ale i souborům, které už nějaké x mají. Takže například spustitelné soubory.
Fill avatar 30.11.2009 14:18 Fill | skóre: 19 | blog: Fill | Třebíč
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Dík za upřesnění. Čímžto pádem je tento přepínač ještě refinovanější a o to více zaslouží býti zmíněn.
30.11.2009 07:59 peter
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Odpovědět | Sbalit | Link | Blokovat | Admin
> Je důležité uvědomit si, že vlastník své soubory může smazat

Pravo mazat ma vlastnik adresara pokial sa nepletiem.
:~/tmp$ ls -ld ./test
drwxr-xr-x 2 root root 4096 2009-11-30 07:57 ./test
:~/tmp$ cd test
:~/tmp/test$ ls -la ./a
-rw-r--r-- 1 peter peter 0 2009-11-30 07:57 ./a
$:~/tmp/test$ rm ./a
rm: cannot remove `./a': Permission denied
30.11.2009 08:14 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Právo mazat nemá ani vlastník, pokud nemá právo zapisovat (+w) na inode adresáře.
In Ada the typical infinite loop would normally be terminated by detonation.
Saljack avatar 30.11.2009 14:45 Saljack | skóre: 28 | blog: Saljack | Praha
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Odpovědět | Sbalit | Link | Blokovat | Admin
Bude vysvětlen i umask někdy v budoucnu?
Sex, Drugs & Rock´n Roll.
30.11.2009 15:23 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Odpovědět | Sbalit | Link | Blokovat | Admin
Pěkně napsáno, +1 za chmod +X v komentářích. S petr.users opatrně, ono to sice funguje, ale imho je to starší varianta k petr:users
30.11.2009 19:59 Spike | skóre: 30 | blog: Communicator | Praha
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Odpovědět | Sbalit | Link | Blokovat | Admin
brw-rw---- 1 root root    7, 0 2009-11-08 14:41 blokove_zarizeni
Ať to čtu jak to čtu… v druhém sloupci určitě není jméno vlastníka. ;)
David Watzke avatar 30.11.2009 20:10 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Pravda, to mi uteklo. Věta:
Ve druhém sloupci je uvedeno jméno vlastníka a ve třetím potom název skupiny.
by tedy měla znít takto:
Ve třetím sloupci je uvedeno jméno vlastníka a ve čtvrtém potom název skupiny.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Nicky726 avatar 1.12.2009 21:11 Nicky726 | skóre: 56 | blog: Nicky726
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Odpovědět | Sbalit | Link | Blokovat | Admin
Zde se hodí upozornit, že chmod s přepínačem -R dovede (především spuštěný pod rootem) velice snadno znehodnotit systém

A co teprv, když dá člověk:

chmod -R /bla/bla/bla/*

To je taky pěkný hukot, a nijak nepomůže, že se před odentrováním dvakrát zkontroluje cesta.

Enjoy the detours. There you’ll find the things more important than what you want. (Hunter x Hunter)
2.12.2009 09:51 PetrHL | skóre: 17 | blog: petr_h | Neratovice
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Odpovědět | Sbalit | Link | Blokovat | Admin
Můžete sem prosím hodit konfigurační soubor s nastavením barev pro ls? I když zavolám ls -la --color, výstup není zdaleka tak barevný jako je uvedeno na obrázku zde. Aby se ls --color použil vždy, předpokládám že bude stačit to zadat jako alias do .bashrc.
"Do, or do not. There is no 'try.'" -- Jedi Master Yoda | CQRLOG | CQRPROP | HamQTH | Domů
David Watzke avatar 2.12.2009 17:09 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Příloha:
Jojo... je to /etc/DIR_COLORS (v příloze).
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
10.12.2009 11:00 Hobil
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Odpovědět | Sbalit | Link | Blokovat | Admin
Chybka: "Například pro spustitelné soubory se často používá 755, tedy rwxr-xr-x – vlastník má neomezená práva a ostatní mohou soubor jen číst nebo spustit"

Predpokladam, ze ma byt rwxr-xr-xr.

H.
Jiří Svoboda avatar 11.12.2009 10:27 Jiří Svoboda | skóre: 37 | blog: cat /dev/mind | Prostějov
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Je to dobře, nesmysl je to tvoje.
13.1.2016 12:58 uplnej vypatlanec
Rozbalit Rozbalit vše Re: Unixové nástroje – 5 (oprávnění: chmod, chown, chgrp)
Odpovědět | Sbalit | Link | Blokovat | Admin
kuwa to s tim chown -R / jsem cist driv kuwa :-(((

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.