Každý objekt ve vašem systému Linux má režim oprávnění, který popisuje, jaké akce s ním může uživatel provádět. Existují tři typy oprávnění:číst (r ), napište (w ) a spusťte (x ).
Chcete-li číst soubor slouží k zobrazení jeho obsahu. Například textový soubor musí být přečten povolení pro někoho číst text uvnitř. Pokud chce uživatel do tohoto souboru přidat větu, potřebuje zapsat povolení. Spustit oprávnění umožňuje někomu spustit soubor, jako je skript shellu nebo soubor binárního programu.
Základní oprávnění
Parametr ls -l zobrazí oprávnění přiřazená k souboru. Například:
ls -l
-rw-rw-r-- 1 bruce bruce 0 Jul 30 16:25 schedule1.txt
Některá oprávnění (rw ) se objevují více než jednou, protože odkazují na různé entity:uživatel , skupina a jiné . Uživatel je synonymem vlastníka a skupiny odkazuje na primární skupinu uživatele, přičemž obě jsou bruce . Jiné odkazuje na všechny ostatní uživatele.
První pozice označuje typ objektu:- pro soubor d pro adresář a l za symbolický odkaz. Následujících devět pozic je seskupeno po třech a popisuje režim povolení. Pozice jsou seřazeny r ,w ,x a skupiny jsou seřazeny podle uživatele , skupina , jiné .
--- --- --- | rwx rwx rwx |
uuu ggg ooo | u=uživatel, g=skupina, o=jiný |
Soubory
Objeví se soubor s bity čtení, zápisu a spouštění nastavenými pro všechny entity:
rwxrwxrwx
V reálném světě samozřejmě soubory takto povolně nekonfigurujeme; toto je pouze ilustrace toho, jak se jednotlivé pozice používají.
V následujícím příkladu je soubor nakonfigurován pro jeho vlastníka (pablo ) mít oprávnění ke čtení a zápisu, aby členové skupiny měli oprávnění pouze ke čtení a všichni ostatní neměli oprávnění žádná.
-rw-r----- 1 pablo pablo 0 Jul 30 16:25 textfile
chmod příkaz upravuje režim oprávnění objektů v systému. Je to jeden z nejpoužívanějších a nejdůležitějších příkazů v sadě linuxových bezpečnostních příkazů.
Plus (+ ) symbol přidává oprávnění a mínus (- ) symbol odebere oprávnění. Můžete si přečíst chmod u+r jako „uživatel plus čtení“, protože dává uživateli čtení povolení. Příkaz chmod u-r znamená "uživatel mínus čtení", protože trvá čtení povolení od uživatele.
Adresáře
Stejná tři oprávnění platí také pro adresář. Adresář musí mít čtení oprávnění pro uživatele k prohlížení jeho obsahu. Bude potřeba zapsat oprávnění pro uživatele přidat do adresáře (např. vytvořit nový soubor). Aby uživatel mohl přejít do adresáře (cd ), musí mít spustit povolení.
drw-rw-r-- 2 pablo pablo 4096 Jul 30 15:56 JBOSS
Pablo může být vlastníkem adresáře JBOSS, ale protože nemá oprávnění ke spuštění, nemůže cd do toho. Může použít příkaz chmod u+x přidat oprávnění a poté může cd do toho.
$ cd JBOSS
bash: cd: JBOSS: Permission denied
$ chmod u+x JBOSS
$ ls -l
drwxrw-r-- 2 pablo pablo 4096 Jul 30 15:56 JBOSS
$ cd JBOSS
$ pwd
/opt/JBOSS
Kombinované argumenty
Argumenty můžete kombinovat pomocí čárky. V tomto příkladu potřebujete pouze jeden příkaz k nastavení oprávnění, takže skupina nemůže zapisovat do souboru ani jej nemůže číst zbytek světa:
$ chmod o-r,g-w readme.txt
$ ls -l
-rw-r----- 1 pablo share 0 Jul 31 13:34 readme.txt
Můžete to číst jako "ostatní mínus čtení a skupina mínus zápis."
Předpokládejme, že Denise napsala skript Bash s názvem home_backup.sh a chce to dát spustit povolení. Také chce zabránit komukoli jinému, aby to četl, zapisoval nebo spouštěl. Jedním ze způsobů, jak toho dosáhnout, jsou symboly plus a mínus:
$ chmod go-rw,u+x home_backup.sh
Dalším způsobem je použití rovná se (= ) symbol. Tím nastavíte oprávnění absolutně bez ohledu na předchozí nastavení. Všimněte si, že za druhým se rovná mezera; to znamená hodnotu none :
$ chmod u=rwx,go= home_backup.sh
Můžete to číst jako „oprávnění pro uživatele se stejným čtením, zápisem a spouštěním a oprávnění pro skupinu a jiné stejné žádné.“
Číselný režim
Chmod také podporuje numerický režim, který používá hodnoty přiřazené každé pozici:
vlastník | skupina | jiné | ||||||
---|---|---|---|---|---|---|---|---|
r | w | x | r | w | x | r | w | x |
400 | 200 | 100 | 40 | 20 | 10 | 4 | 2 | 1 |
Celkovou hodnotu sady oprávnění lze vypočítat a předat příkazu chmod jako jeden argument. Vezměte si příklad s Denise a jejím záložním scénářem. Pokud k nastavení oprávnění pro svůj skript používá číselný režim, musí nejprve vypočítat celkovou hodnotu:
-rwx------ 1 denise denise 0 Jul 31 13:53 home_backup.sh
Denise přidá čísla, která odpovídají každému povolení, o které chce požádat:
400 + 200 + 100 =700
Její příkaz bude chmod 700 home_backup.sh . Předpokládejme, že Denise chtěla obnovit původní oprávnění k souboru:
-rw-rw-r-- 1 denise denise 0 Jul 31 13:53 home_backup.sh
Hodnota těchto oprávnění se vypočítá na 664:
400 + 200 + 40 + 20 + 4 =664
Denise může použít příkaz chmod 664 home_backup.sh obnovit původní oprávnění.
Speciální režimy
U objektu lze nastavit tři další režimy:
název | symbolické | numerický |
---|---|---|
setuid | s | 4000 |
setgid | s | 2000 |
lepící | t | 1000 |
SetUID bit vynucuje vlastnictví uživatele u spustitelného souboru. Když je nastaven, soubor se spustí s uživatelským ID vlastníka souboru, nikoli s osobou, která jej spouští.
$ chmod u+s
SetGID bit vynucuje skupinové vlastnictví souborů a adresářů. Když je nastaven, jakýkoli soubor nebo adresář vytvořený v adresáři získá vlastnictví skupiny adresáře, nikoli uživatele. Když je nastaven na soubor, soubor bude vždy spuštěn jako jeho vlastnící skupina, nikoli jako uživatel:
$ chmod g+s
lepící bit, také označovaný jako "příznak omezeného smazání", lze nastavit v adresáři, aby se zabránilo komukoli kromě vlastníka adresáře ve smazání souboru v tomto adresáři:
$ chmod o+t
Sticky bit lze nastavit v numerickém režimu přidáním jeho hodnoty k hodnotám ostatních oprávnění. Pokud máte objekt s hodnotou 755 a chcete nastavit lepivý bit, přidejte 1000:
1000 + 400 + 200 + 100 + 40 + 10 + 4 + 1 =1755
Tento příkaz by byl chmod 1755 . Několik symbolických metod je ekvivalentních; jedním příkladem je chmod u=rwx,go=rx,o+t .
Doplňky
Písmeno a je zkratka pro přiřazení oprávnění všem uživatelům. Příkaz chmod a+rwx je ekvivalentní chmod ugo+rwx .
Rekurzivní
Stejně jako mnoho jiných příkazů Linuxu má chmod rekurzivní argument -R , který vám umožňuje pracovat s adresářem a jeho obsahem rekurzivně. Rekurzivní znamená, že se příkaz pokusí pracovat se všemi objekty pod zadaným adresářem, nikoli pouze se samotným adresářem. Tento příklad začíná v prázdném adresáři a přidává -v (verbose) argument, takže chmod bude hlásit, co dělá:
$ ls -l . conf
.:
drwxrwxr-x 2 alan alan 4096 Aug 5 15:33 conf
conf:
-rw-rw-r-- 1 alan alan 0 Aug 5 15:33 conf.xml
$ chmod -vR 700 conf
mode of 'conf' changed from 0775 (rwxrwxr-x) to 0700 (rwx------)
mode of 'conf/conf.xml' changed from 0664 (rw-rw-r--) to 0700 (rwx------)
Odkaz
Příkaz referenčního souboru (--reference=RFILE ) lze použít k duplikování režimu jiného souboru (RFILE ), známý jako referenční soubor. To je užitečné, když měníte režimy souborů tak, aby odpovídaly určité konfiguraci, nebo když neznáte přesný režim – nebo nechcete mít čas na jeho výpočet:
$ ls -l
-rw-r--r-x 1 alan alan 0 Aug 5 17:10 notes.txt
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 readme.txt
$ chmod --reference=readme.txt notes.txt
$ ls -l
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 notes.txt
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 readme.txt
Nahlásit změny
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Příkaz chmod má také -c (--změny ) argument, který říká chmod, aby hlásil pouze při provedení změny (oproti -v , nebo -verbose , který říká chmod, aby hlásil veškerý svůj výstup). Chmod bude stále hlásit další věci, například když operace není povolena.
Argument -f (--tichý , -tichý ) potlačí většinu chybových zpráv. Použití tohoto argumentu s -c zobrazí pouze skutečné změny.
Zachovat kořen
Kořen (/ ) souborového systému Linux by se mělo zacházet s velkým respektem. Pokud někdo udělá chybu v příkazu na této úrovni, následky mohou být hrozné a systém zůstane zcela zbytečný, zvláště když spouštíte rekurzivní příkaz, který provede jakoukoli změnu – nebo ještě hůř:odstranění. Naštěstí --preserve-root příkazu chmod argument ochrání a zachová kořen. Pokud je argument použit s rekurzivním příkazem chmod v kořenovém adresáři, nic se nestane a zobrazí se tato zpráva:
[alan@localhost ~]# chmod -cfR --preserve-root a+w /
chmod: it is dangerous to operate recursively on '/'
chmod: use --no-preserve-root to override this failsafe
Volba nemá žádný účinek, pokud není použita s rekurzivní. Pokud však uživatel root spustí příkaz, oprávnění / se změní, ale ne u jiných souborů nebo adresářů.
[alan@localhost ~]$ chmod -c --preserve-root a+w /
chmod: changing permissions of '/': Operation not permitted
[root@localhost /]# chmod -c --preserve-root a+w /
mode of '/' changed from 0555 (r-xr-xr-x) to 0777 (rwxrwxrwx)
Překvapivě to není výchozí argument; --no-preserve-root je. Pokud spustíte příkaz bez možnosti „zachovat“, bude ve výchozím nastavení nastaven režim „bez zachování“ a případně změní oprávnění k souborům, které by neměly být změněny.
[alan@localhost ~]$ chmod -cfR a+x /
mode of '/proc/1525/task/1525/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1541/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1580/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1592/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1557/task/1557/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1558/task/1558/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1561/task/1561/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
Závěr
Všechny objekty v systému Linux mají sadu oprávnění. Je důležité je občas kontrolovat a udržovat, abyste zabránili nechtěnému přístupu.