Obsah
Práva souborů
Podrobný výpis
Příkazem ls -l vytiskne více informací k souboru/souborech/adresářích.
- 10 znaků popisujících typ souboru + jeho práva
- počet odkazů na soubor
- vlastník souboru
- vlastnická grupa (skupina)
- velikost souboru. Není-li čitelná, přidejte přepínač
-h
- datum a čas poslední změny
- jméno souboru
Práva souboru
Klasická práva jsou definovaná devíti, tedy 3x3 znaky. První trojice definuje práva vlastníka souboru, druhá trojice vlastnické skupiny a poslední trojice všech ostatních uživatelů na serveru.
r právo ke čtení. V případě adresáře se mohu podívat na obsah adresáře, kopírovat z něj, v případě souboru na obsah souboru.
w právo k zápisu. V případě adresáře v něm mohu mazat, vytvářet nové soubory/adresáře, kopírovat do něj. V případě souboru, mohu jej editovat.
x právo ke spouštění. Pro adresář znamená, že do něj můžu přejít příkazem cd. Pro soubor to znamená, že může být spuštěn, čím, to by mělo být definováno v hlavičce souboru.
Kromě těchto běžných práv jsou ještě možná další
---s------ SUID. Na místě, kde by normálně bylo, jestli má soubor právo pro spuštění uživatelem, může být znak s, který označuje SUID. Umožňuje jakémukoli uživateli spustit soubor s právy vlastníka souboru.
------s--- SGID. Na místě, kde by normálně bylo, jestli má soubor právo pro spuštění grupou. Umožňuje spustit soubor se stejnými právy, jako má vlastnická grupa souboru.
---------t sticky bit. Hodí se pro tmp adresáře, způsobí, že do nich každý uživatel může zapisovat, ale nemůže mazat cizí soubory.
Vlastník souboru, uživatelská grupa
Vlastník souboru v klasických právech je jen jediný, může přidělovat práva. Root má stejná práva jako vlastník souboru (takže je může také měnit).
Vlastnická grupa má definovanou také svou skupinu práv, každý soubor má jen jednu vlastnickou grupu.
Běžný uživatel nemůže změnit vlastníka souboru, to je vyhrazeno pouze rootovi. Běžný uživatel může změnit vlastnickou grupu souboru, pokud je členem nové grupy. Pro změnu vlastníka souboru slouží příkaz chown, pro změnu vlastnické grupy chgrp.
Změna práv
Pro změnu práv slouží příkaz chmod právo soubor(y) (change mode). Má povinné dva parametry, první z nich definuje, jaká práva se mají změnit a druhý na jaké soubory má tu změnu provést.
Symbolický zápis práv
U symbolického zápisu potřebujete zapsat tři informace: komu — jakou změnu — jaké právo
- Komu:
u jako user je vlastník souboru
g jako group tedy vlastnická skupina
o jako others tedy všichni ostatní, kteří mají přístup na stroj, nejsou vlastník ani nejsou ve vlastnické skupině
a jako all, tedy všichni
- Jakou změnu:
+ přidej právo
- uber právo
= nastav právo pouze na toto
- Jaké právo:
r právo ke čtení
w právo k zápisu
x právo ke spouštění
X přidává právo ke spuštění všem adresářům (které definuju v parametru soubor) a pak všem souborům, které mají alespoň pro někoho právo ke spuštění
s přidává SUID nebo SGID
t sticky bit
Příklady:
chmod o+x soubor přidá ostatním práva ke spouštění
chmod a-r soubor odebere všem práva ke čtení
chmod go-r soubor odebere práva ke čtení skupině a ostatním
chmod go=r soubor nastaví skupině a ostatním práva ke čtení, ale zároveň jim sebere práva k zápisu a spouštění, pokud nějaké měli
chmod a=rwx soubor dá všem práva ke čtení, zápisu i spouštění
chmod a= soubor sebere všem práva ke čtení, zápisu i spouštění
Numerický zápis práv
Symbolický zápis práv je jednoduchý k přečtení i pochopení, nicméně se může stát, že požadovaná práva nenastavíte jediným příkazem. Také po většinou vás nezajímá, jaká práva soubor ve stávající chvíli má, ale chcete pouze nastavit práva nová. K tomu se hodí výborně numerický zápis. V něm požadovaná práva přepočítáte do osmičkové soustavy.
| požadovaná práva | rwx | r-x | r-x |
| jejich zápis ve dvojkové soustavě | 111 | 101 | 101 |
| přepočteno do osmičkové soustavy | 4+2+1 | 4+0+1 | 4+0+1 |
| vychází | 7 | 5 | 5 |
Zvídavý čtenář teď přemýšlí nad úskalím osmičkové soustavy a proč ten přepočet vypadá úplně stejně, jako kdybyste převáděli dvojkové číslo do desítkové soustavy. Nejvyšší práva, která zde budu nastavovat, jsou rwx, tedy 111 dvojkově, tedy číslice 7 desítkově. Osmičková soustava disponuje číslici 0-7, 7 je nejvyšší, v osmičkové soustavě bude i fungovat, když si ty čísla napíšete za sebe a budete převádět 111101101, vyjde vám 755.
Více příkladů:
| požadovaná práva | rwx | r-- | --- |
| jejich zápis ve dvojkové soustavě | 111 | 100 | 000 |
| přepočteno do osmičkové soustavy | 4+2+1 | 4+0+0 | 0+0+0 |
| vychází | 7 | 4 | 0 |
| požadovaná práva | rw- | rw- | -w- |
| jejich zápis ve dvojkové soustavě | 110 | 110 | 010 |
| přepočteno do osmičkové soustavy | 4+2+0 | 4+2+0 | 0+2+0 |
| vychází | 6 | 6 | 2 |
Numerický zápis v příkazu chmod nahradí symbolický zápis
chmod 755 soubor nastaví práva rwxr-xr-x
chmod 644 soubor nastaví práva rw-r--r--
chmod 700 soubor nastaví práva rwx------
chmod 444 soubor nastaví práva rw-rw-rw-
chmod 777 soubor nastaví práva rwxrwxrwx
chmod 000 soubor nastaví práva ---------
Co když vlastníte soubor, do kterého nemáte práva zapisovat? Některé aplikace jsou chytřejší a vidí, že když jej vlastníte, tak jej můžete i měnit. Nicméně na to nespoléhejte a nemáte-li práva k zápisu a přesto potřebujete soubor změnit, tak si ty práva změňte.
Proč se vůbec máte znervózňovat s právy a nenastavíte všude rwxrwxrwx? Protože nežijeme v ideálním světě. Věřím, že máte nějaké bezpečné místo, ale váš počítač připojený k Internetu to není. Práva souborů řešíte ze stejného důvodu, ze kterého zamykáte dveře od bytu nebo nenecháváte zapnutou cirkulárku před mateřskou školkou.
Jak se nastavuje SUID, SGIT a stickybit
Symbolicky
chmod u+s soubor přidá SUID ??s??????
chmod g+s soubor přidá SGID ?????S???
chmod o+t soubor přidá sticky bit ????????T
Numericky
chmod 4755 soubor nastaví práva rwsr-xr-x
chmod 2644 soubor nastaví práva rw-r-Sr-- 1
chmod 1644 soubor nastaví práva rw-r--r-Todebere práva ke čtení skupině a ostatním
chmod 644 soubor sebere případný SUID, GUID, sticky bit a nastaví rw-r--r--
Toto byla klasická práva a co je jiného?
Klasická práva jsou definovaná ve všech běžných UNIXových systémech. Tento princip nemusí vyhovovat pro každé použití, proto se můžete setkat i s rozšířeným pojetím práv, nejčastěji použití ACL. Zde je možné definovat skupiny uživatelů s různými právy. Pro zjištění práv je příkaz getfacl, pro nastavení setfacl