Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Software
Vlastník, skupina, ostatní...
21. března 2002, 00.00 | Minule jsme si ukázali, že práva jsou vždy určena trojicí přepínačů "r", "w" a "x" (z nichž poslední může kromě hodnot "ano" a "ne" také mít speciální hodnoty "s" pro spustitelné soubory nebo "t" pro složky).
Minule jsme si ukázali, že práva jsou vždy určena trojicí přepínačů "r", "w" a "x" (z nichž poslední může kromě hodnot "ano" a "ne" také mít speciální hodnoty "s" pro spustitelné soubory nebo "t" pro složky).Víme už, jaká skutečná práva se od hodnot těchto přepínačů dají odvodit pro soubory i pro složky; dosud jsme si ale neřekli, kde systém hodnoty těchto přepínačů pro danou operaci vezme. Na to se podíváme dnes.
Kdy je vlastník efektivní?
Už jsme se zmínili o tom, že kromě všech objektů v systému souborů mají de facto vlastníka také všechny běžící programy: je jím vždy ten uživatel, v rámci jehož konta byl program spuštěn, a systém tuto informaci pro všechny běžící programy poctivě udržuje.
Minule jsme se však zmínili o přepínači "s", který zajistí, že program může běžet s právy nikoli toho, kdo jej spustil, ale s právy toho, komu patří soubor, ve kterém je kód programu uložen. To je zajištěno tak, že systém kromě vlastníka běžícího programu zná ještě tzv. efektivního vlastníka (effective UID). To je ten, jehož práva program má: u programů s přepínačem "x" ten, kdo program spustil; vlastník souboru u programů s přepínačem "s".
Třikrát tři je devět
Každý objekt v systému souborů s sebou nese kromě informace o vlastníkovi, se kterou jsme se seznámili předminule, také tři trojice bitů, representujících přístupová práva: první se vztahuje k vlastníkovi samotnému, druhá ke skupině (skupinami se budeme zabývat později, protože se používají poměrně málokdy, a teď by nám zbytečně komplikovaly situaci), a třetí ke "všem ostatním".
Způsob, jakým systém získá trojici přepínačů, určující práva programu provést určitou operaci, je tedy poměrně jednoduchý:
- porovná efektivního vlastníka běžícího programu s vlastníkem objektu. Jsou-li totožní, použije první trojici přepínačů;
- způsobem, na který se podíváme později, ověří skupinu — pokud je efektivní vlastník programu v požadované skupině, použije druhou trojici přepínačů;
- jinak použije třetí trojici.
Zbytek je už zřejmý...
Zobrazení přístupových práv
Přístupová práva k objektům zobrazuje příkaz ls jako řadu devíti písmenek: tři prvá jsou "r", "w" a "x" vlastníka, tři následující "r", "w" a "x" skupiny, a tři poslední "r", "w" a "x" pro všechny ostatní. Jestliže dané právo je k dispozici, zobrazí se odpovídající písmenko "r", "w" nebo "x"; není-li, zobrazí se na jeho místě pomlčka. Speciální práva "s" a "t" indikuje přímo písmeno "s" nebo "t" na místě odpovídajícího "x".
"Písmenka" přímo navazují na znak, určující typ objektu; písmen v řadě je tedy dohromady deset: první určuje typ, následujících devět práva. Ukažme si pár typických příkladů:
22 ~> ls -l
total 304
drwxr-xr-x 4 ocs staff 92 Feb 7 21:11 Applications/
-rw-r--r-- 1 ocs staff 17109 Jan 6 18:00 Contacts.export
drwx------ 22 ocs staff 704 Jan 30 17:23 Documents/
-rw------- 1 ocs staff 640 Feb 5 04:32 Saved.channel
-rwx------ 1 ocs staff 1560 Feb 7 20:14 a.out*
...
23 ~>
Složka "Applications" je k dispozici komukoli — všichni mají práva "r" a "x". Jen vlastník (jak vidíme v třetím sloupci, uživatel "ocs") však smí obsah složky měnit. Znak "d" na začátku samozřejmě ukazuje, že jde o složku. Obdobný případ se souborem je "Contacts.export": číst jeho obsah smí kdokoli, ale jen vlastník jej může měnit.
Jinak je tomu se složkou "Documents" a se souborem "Saved.channel": ty jsou přístupné pouze vlastníkovi. Nikdo jiný nesmí složku či soubor ani číst, ani měnit, ani žádným jiným způsobem používat.
Velmi podobně jsou nastavena práva souboru "a.out"; opět nikdo jiný než vlastník nemá žádná práva. Vlastník však tentokrát má i právo "x", protože "a.out" je spustitelný program.
25 ~> ls -l /bin
total 4200
-r-xr-xr-x 2 root wheel 13728 Sep 3 04:51 [*
-r-xr-xr-x 1 root wheel 13980 Sep 3 04:58 cat*
...
-r-sr-xr-x 1 root wheel 24588 Sep 3 04:31 rcp*
...
26 ~>
Standardní unixové programy smí kdokoli spouštět i číst; nikdo je však nesmí měnit (ani "root", který je jejich vlastníkem — ten ovšem může jako jediný jejich přístupová práva kdykoli změnit).
Program rcp ovšem potřebuje přístup k administrátorským prostředkům; proto má nastaven bit "s" ve skupině práv vlastníka, což znamená, že ať program spustí kdo chce, jeho efektivním vlastníkem bude "root".
26 ~> ls -ld /private/tmp
drwxrwxrwt 15 root wheel 466 Feb 7 22:27 /private/tmp/
27 ~>
Sdílená složka "/private/tmp" (my ji známe jako "/tmp", ale to je jen link) dává komukoli plné právo ji číst, používat i měnit. Ale pozor: "sticky" přepínač "t", zobrazený ve skupině práv "ostatních", zamezuje mazání cizích souborů: uvnitř této složky smíme smazat jen to, co jsme tam uložili sami.
Změny práv
Pro změnu práv slouží standardní příkaz chmod. Jeho prvním argumentem je požadované nastavení práv; za ním následuje seznam objektů, jimž se mají práva požadovaným způsobem nastavit.
Příkaz chmod nabízí velmi bohatou paletu možností; my se zde seznámíme opět jen se základním ovládáním. To je ovšem velmi jednoduché: nejprve určíme skupinu nebo skupiny, pro které chceme přepínač změnit; k tomu slouží písmena
- u ("user"): vlastník objektu;
- g ("group"): skupina;
- o ("other"): všichni ostatní;
- a ("all"): všechny tři skupiny. Písmeno 'a' je ekvivalentní trojici písmen 'ugo'.
Pak zapíšeme znak '+' pro nastavení přepínače, znak '-' pro jeho zrušení. Nakonec přidáme seznam přepínačů, s nimiž chceme pracovat — k tomu použijeme jejich standardní značky "r", "w", "x", "s" a "t". Podívejme se na pár příkladů:
61 /tmp> echo "Test" > test
62 /tmp> chmod a-rwx test ; ls -l test
---------- 1 ocs wheel 5 Feb 7 23:30 test
63 /tmp> chmod uo+rw test ; ls -l test
-rw----rw- 1 ocs wheel 5 Feb 7 23:30 test
64 /tmp> chmod u+sx test ; ls -l test
-rws---rw- 1 ocs wheel 5 Feb 7 23:30 test*
65 /tmp> chmod u-s test ; ls -l test
-rwx---rw- 1 ocs wheel 5 Feb 7 23:30 test*
66 /tmp> chmod u-r,g+rw,o+x test ; ls -l test
--wxrw-rwx 1 ocs wheel 5 Feb 7 23:30 test*
67 /tmp>
Za povšimnutí stojí, že přepínač "s" není náhradou "normálního" přepínače "x", ale jeho doplňkem; musíme tedy nastavit oba, jak je vidět na řádku 64. Jestliže pak zrušíme jen "s", "x" zůstane (řádek 65). Řádek 66 ukazuje, jak je možné spojovat více operací dohromady.
S přepínačem "t" pro složky je tomu podobně, jako s přepínačem "s"; jen je trochu matoucí, že ačkoli se přepínač zobrazuje ve skupině "ostatní", musíme jej nastavit pro "vlastníka" nebo "skupinu" — asi nejintuitivnější je jej určovat pro všechny najednou:
67 /tmp> mkdir tdir
68 /tmp> chmod a+t tdir ; ls -ld tdir
drwxr-xr-t 2 ocs wheel 24 Feb 7 23:32 tdir/
69 /tmp> chmod a-t tdir ; ls -ld tdir
drwxr-xr-x 2 ocs wheel 24 Feb 7 23:32 tdir/
70 /tmp>
Mimochodem, stejně jako chown, i chmod rozumí přepínači -R (recursive) a dokáže na jeho základě měnit přístupová práva pro všechny objekty v zadané složkce i ve složkách jí podřízených.
Zbývají už jen skupiny...
Příště dokončíme povídání o systému vlastnictví a přístupových práv Mac OS X tím, že si vysvětlíme jak fungují skupiny, a k čemu tedy je ta prostřední sada tří "písmenek".
Obsah seriálu (více o seriálu):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová