GNU/Linux >> Znalost Linux >  >> Linux

15 Příklady příkazů SELinux chcon pro změnu kontextu zabezpečení

V SELinuxu je jedním z častých úkolů, které můžete dělat, změnit kontext zabezpečení objektu. K tomu použijete příkaz chcon.

chcon je zkratka pro Change Context.

Tento příkaz se používá ke změně kontextu zabezpečení SELinux souboru.

Tento kurz vysvětluje následující příklady příkazů chcon:

  1. Změnit úplný kontext SELinux
  2. Změnit kontext pomocí jiného souboru jako reference
  3. Změnit pouze uživatele v kontextu SELinux
  4. Změnit pouze roli v kontextu SELinux
  5. Změňte pouze typ v kontextu SELinux
  6. Změňte pouze rozsah (úroveň) v kontextu SELinux
  7. Kombinovat uživatele, roli, typ a úroveň v chcon
  8. Výchozí chování Chcon na symbolickém odkazu
  9. Vynutit změnu kontextu symbolického odkazu SELinux
  10. Rekurzivně změnit kontext SELinux
  11. Zobrazení podrobných podrobností o operaci chcon
  12. Výchozí chování Chcon na symbolických odkazech pro rekurzivní
  13. Vynutit chcon procházet zadané symbolické odkazy pro rekurzivní
  14. Vynutit chcon procházet VŠECHNY symbolické odkazy pro rekurzivní
  15. Chcon Behavior on / root directory for Systemwide Change

1. Změňte úplný kontext SELinux

Chcete-li zobrazit kontext zabezpečení souboru, použijte volbu -Z (velké Z) v příkazu ls, jak je uvedeno níže.

# ls -lZ httpd.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 httpd.conf

Ve výše uvedeném příkladu je kontext zabezpečení souboru httpd.conf následující:

unconfined_u:object_r:admin_home_t:s0

Toto je nesprávný kontext SELinux pro soubor httpd.conf, který je v adresáři /etc/httpd/conf.

Chcete-li tedy změnit kontext zabezpečení, použijte následující příkaz chcon.

# chcon system_u:object_r:httpd_config_t:s0 httpd.conf

Ve výše uvedeném příkladu jsme změnili kontext zabezpečení souboru httpd.conf na následující, který je správný.

system_u:object_r:httpd_config_t:s0

Můžeme to ověřit pomocí následujícího příkazu ls -lZ.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

Poznámka:Ve výše uvedeném příkladu poskytujeme úplný kontext SELinux souboru (tj. uživatel, role, typ a rozsah) ve formátu uživatel:role:typ:rozsah, aniž bychom jej dále rozdělovali.

Kdykoli budete čelit problémům souvisejícím se SELinuxem, můžete být v pokušení jednoduše SELinux zakázat, jak jsme vysvětlili dříve. V mnoha situacích však můžete zjistit, že jde pouze o to, že daný soubor má nesprávný bezpečnostní kontext, který lze změnit pomocí příkazu chcon.

2. Změnit kontext pomocí jiného souboru jako reference

Někdy možná nevíte, jaký kontext SELinuxu byste měli pro soubor nastavit.

V takovém případě můžete jako referenci použít kontext zabezpečení jiného souboru a použít jej k přiřazení k vašemu souboru.

V podstatě místo určení úplného kontextu SELinux pro soubor používáte pouze kontext jiného souboru pro váš soubor.

V následujícím příkladu vidíme, že jak ssl.conf, tak httpd.conf mají odlišný kontext SELinux.

# ls -lZ
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 ssl.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 httpd.conf

V tomto případě víme, že soubor ssl.conf má správný kontext zabezpečení. Ale httpd.conf má nesprávný.

Změníme tedy bezpečnostní kontext souboru httpd.conf, ale jako referenci pro tuto změnu použijeme kontext ssl.conf, jak je uvedeno níže.

# chcon --reference=ssl.conf httpd.conf

Po výše uvedené změně můžete vidět, že soubor httpd.conf má stejný kontext zabezpečení jako soubor ssl.conf.

# ls -lZ
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 ssl.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

Související poznámka:Chcete-li zobrazit aktuální stav SELinuxu, použijte příkaz sestatus. Je důležité, abyste porozuměli výstupu příkazu sestatus, jak je vysvětleno zde:3 Výstup příkazu SELinux sestatus vysvětlený s příklady

3. Změňte pouze uživatele v kontextu SELinux

Namísto změny celého kontextu zabezpečení SELinuxu můžeme také změnit pouze jeho částečnou hodnotu.

Níže je uveden aktuální kontext zabezpečení souboru httpd.conf.

# ls -lZ httpd.conf 
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 httpd.conf

Ve výše uvedeném příkladu je „unconfined_u“ uživatelská část kontextu zabezpečení.

Pomocí volby chcon -u můžeme změnit pouze uživatelskou část kontextu zabezpečení.

V následujícím příkladu nastavujeme uživatelskou část kontextu zabezpečení na system_u pro soubor httpd.conf.

# chcon -u system_u httpd.conf

Jak vidíte z následujícího výstupu, u souboru httpd.conf se změní pouze USER část kontextu zabezpečení.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 httpd.conf

Místo -u můžete také použít –user. Oba následující příkazy jsou naprosto stejné.

# chcon --user system_u httpd.conf

# chcon -u system_u httpd.conf

4. Změňte pouze roli v kontextu SELinux

Pomocí volby chcon -r můžeme změnit pouze část ROLE kontextu zabezpečení.

V následujícím příkladu nastavujeme část role kontextu zabezpečení na object_r pro soubor httpd.conf.

# chcon -r object_r httpd.conf

Jak vidíte z následujícího výstupu, u souboru httpd.conf je změněna pouze část ROLE kontextu zabezpečení.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 httpd.conf

Když zadáte roli, kterou SELinux nerozpozná, zobrazí se následující chyba neplatného argumentu. V tomto příkladu neexistuje role jako „identity_r“.

# chcon -r identity_r httpd.conf
chcon: failed to change context of ‘httpd.conf’ to ‘system_u:identity_r:admin_home_t:s0’: Invalid argument

Můžete také použít –role místo -r. Oba následující příkazy jsou naprosto stejné.

# chcon --role object_r httpd.conf

# chcon -r object_r httpd.conf

5. Změňte pouze TYP v kontextu SELinux

To je pravděpodobně to, co budete většinou používat, protože TYPE je to, o co se v typickém nastavení SELinuxu většinu času zajímáme.

Níže je uveden aktuální kontext zabezpečení souboru httpd.conf.

# ls -lZ httpd.conf 
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 httpd.conf

Ve výše uvedeném příkladu je „admin_home_t“ TYPE součástí kontextu zabezpečení.

Pomocí volby chcon -t můžeme změnit pouze typovou část kontextu zabezpečení.

V následujícím příkladu nastavujeme typovou část kontextu zabezpečení na httpd_config_t pro soubor httpd.conf.

# chcon -t httpd_config_t httpd.conf

Jak vidíte z následujícího výstupu, u souboru httpd.conf je změněna pouze část TYPE v kontextu zabezpečení.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

Místo -t můžete také použít –type. Oba následující příkazy jsou naprosto stejné.

# chcon -t httpd_config_t httpd.conf

# chcon --type httpd_config_t httpd.conf

6. Změňte pouze rozsah (úroveň) v kontextu SELinux

Pomocí volby chcon -l můžeme změnit pouze část RANGE (která se také nazývá úroveň) kontextu zabezpečení. Rozsah se používá pouze v MLS a v typické situaci nemusíme rozsah změnit.

V následujícím příkladu nastavujeme rozsahovou část kontextu zabezpečení na „s0“ pro soubor httpd.conf.

# chcon -l s0 httpd.conf

Jak vidíte z následujícího výstupu, u souboru httpd.conf je změněna pouze část ROLE kontextu zabezpečení.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

Místo -l můžete také použít –range. Oba následující příkazy jsou naprosto stejné.

# chcon -l s0 httpd.conf

# chcon --range s0 httpd.conf

7. Kombinujte uživatele, roli, typ, úroveň v chcon

V chcon můžete kombinovat volbu uživatele (-u), roli (-r), typ (-t) nebo úroveň (-l).

Například následující změní všechny čtyři, jak je uvedeno níže.

# chcon -u system_u -r object_r  -t httpd_config_t -l s0 httpd.conf

Nebo můžete kombinovat a měnit pouze několik z nich najednou. Například v následujícím příkladu měníme pouze USER a TYPE souboru httpd.conf.

# chcon -u system_u -t httpd_config_t httpd.conf

8. Výchozí chování Chcon na symbolickém odkazu

V následujícím příkladu je apache.conf symbolický odkaz na soubor httpd.conf. Oba mají nesprávný bezpečnostní kontext.

# ls -lZ
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 apache.conf -> httpd.conf
-rw-r--r--. unconfined_u:object_r:admin_home_t:s0 httpd.conf

V následujícím příkladu měním USER a TYPE pro symbolický odkaz apache.conf.

# chcon -u system_u -t httpd_config_t apache.conf

ALE, jak vidíte zde, toto skutečně změnilo kontext SELinux pro soubor, na který ukazuje, místo toho, aby se změnil u symbolického odkazu.

# ls -lZ
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 apache.conf -> httpd.conf
-rw-r--r--. system_u:object_r:httpd_config_t:s0 httpd.conf

Toto je výchozí chování příkazu chcon. tj. Změní kontext souboru, na který ukazuje, namísto samotného symbolického odkazu.

Toto chování se nazývá de-referencování. Chcon má možnost nazvanou –dereference, která změní soubor namísto symbolického odkazu.

Oba následující příklady jsou naprosto stejné.

# chcon -u system_u -t httpd_config_t apache.conf

# chcon --dereference -u system_u -t httpd_config_t apache.conf

9. Vynutit změnu kontextu symbolického odkazu SELinux

Místo změny kontextu zabezpečení souboru, na který odkazuje symbolický odkaz, můžete také přinutit chcon, aby změnil kontext samotného symbolického odkazu.

V následujícím příkladu je apache.conf symbolický odkaz na soubor httpd.conf. Oba mají nesprávný bezpečnostní kontext.

# ls -lZ
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 apache.conf -> httpd.conf
-rw-r--r--. unconfined_u:object_r:admin_home_t:s0 httpd.conf

Když v chcon zadáme volbu –no-dereference, změní se kontext symbolického odkazu a ne soubor, na který odkazuje.

Následující příklad tedy změní USER a TYPE pro symbolický odkaz apache.conf (a nikoli soubor httpd.conf).

# chcon --no-dereference -u system_u -t httpd_config_t apache.conf

Jak vidíte z následujícího, pouze kontext SELinux symbolického odkazu apache.conf je změněn na ten, který jsme specifikovali výše.

# ls -lZ
lrwxrwxrwx. system_u:object_r:httpd_config_t:s0 apache.conf -> httpd.conf
-rw-r--r--. unconfined_u:object_r:admin_home_t:s0 httpd.conf

Namísto –no-dereference můžeme také zadat volbu „-h“, jak je uvedeno níže.

Oba následující příkazy jsou naprosto stejné.

# chcon -h -u system_u -t httpd_config_t apache.conf

# chcon --no-dereference -u system_u -t httpd_config_t apache.conf

10. Rekurzivně změnit kontext SELinux

V tomto příkladu je následující aktuální bezpečnostní linuxový kontext všech souborů pod conf.d

# ls -lZ conf.d/
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 autoindex.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 nss.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 README
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 userdir.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 welcome.conf

Pomocí rekurzivní volby chcon -R můžeme rekurzivně změnit všechny soubory v conf.d na kontext zabezpečení dát, jak je uvedeno níže.

# chcon -R system_u:object_r:httpd_config_t:s0 conf.d

Jak vidíte níže, kontext se rekurzivně mění pro všechny soubory v conf.d

# ls -lZ conf.d
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 autoindex.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 nss.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 README
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 userdir.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 welcome.conf

Poznámka:Pokud jsou v conf.d další podadresáře, všechny tyto podadresáře a soubory pod nimi budou také ovlivněny volbou -R.

Můžete také použít – rekurzivní možnost. Oba následující příkazy jsou naprosto stejné.

# chcon --recursive system_u:object_r:httpd_config_t:s0 conf.d

# chcon -R system_u:object_r:httpd_config_t:s0 conf.d

11. Zobrazit podrobné podrobnosti o operaci chcon

Pomocí volby -v můžete zobrazit podrobnosti o tom, co chcon dělá.

-v znamená verbose, což zobrazí název souboru, který je právě zpracováván příkazem chcon, jak je uvedeno níže.

To je velmi užitečné, když kombinujete s rekurzivní volbou -R, kde můžete měnit kontext velkého množství souborů a chcete vidět, co chcon aktuálně dělá, jak je uvedeno níže.

# chcon -Rv system_u:object_r:httpd_config_t:s0 conf.d
changing security context of ‘conf.d/README’
changing security context of ‘conf.d/autoindex.conf’
changing security context of ‘conf.d/userdir.conf’
changing security context of ‘conf.d/welcome.conf’
changing security context of ‘conf.d/nss.conf’
changing security context of ‘conf.d’

12. Výchozí chování Chcon na symbolických odkazech pro rekurzivní

V tomto příkladu je „config“ symbolický odkaz na adresář conf.d, jak je znázorněno níže.

# ls -lZ
drwxr-xr-x. system_u:object_r:httpd_config_t:s0 conf.d
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 config -> conf.d

Ve výchozím nastavení, když provedete rekurzivní operaci na symbolickém odkazu, nebude procházet adresářovou strukturou.

Můžete to vidět zkombinováním volby -v s -R, která ve výstupu nezobrazuje žádné názvy souborů. To znamená, že neprochází přes symbolický odkaz „config“.

# chcon -Rv -t httpd_config_t config
changing security context of ‘configuration’

Na toto výchozí chování odkazuje také volba -P (velké P).

Oba následující příkazy jsou tedy naprosto stejné. Oba nebudou procházet symbolické odkazy.

# chcon -Rv -t httpd_config_t config

# chcon -RPv -t httpd_config_t configuration

13. Vynutit chcon procházet specifikované symbolické odkazy pro rekurzivní

V tomto příkladu je „config“ symbolický odkaz na adresář conf.d, jak je znázorněno níže.

# ls -lZ
drwxr-xr-x. system_u:object_r:httpd_config_t:s0 conf.d
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 config -> conf.d

Když zadáte symbol v příkazu chcon, můžete přinutit chcon, aby ji prošel pomocí volby -H, jak je uvedeno níže.

Jak vidíte z následujícího výstupu, chcon prochází přes konfigurační symbolický odkaz a zpracovává všechny soubory, když jsme zadali volbu „-H“ spolu s volbou „-R“.

# chcon -RHv -t httpd_config_t config
changing security context of ‘config/README’
changing security context of ‘config/autoindex.conf’
changing security context of ‘config/userdir.conf’
changing security context of ‘config/welcome.conf’
changing security context of ‘config/nss.conf’
changing security context of ‘config/ndd’
changing security context of ‘config’

14. Vynutit chcon procházet VŠECHNY symbolické odkazy pro rekurzivní

V tomto příkladu je „config“ symbolický odkaz na adresář conf.d, jak je znázorněno níže.

# ls -lZ
drwxr-xr-x. system_u:object_r:httpd_config_t:s0 conf.d
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 config -> conf.d

V následujícím příkladu v adresáři config máme adresář „ndd“, což je symbolický odkaz.

# ls -l configuration/ndd
lrwxrwxrwx. 1 root root 6 Jul  8 00:13 configuration/ndd -> ../ndd

Pokud chcete, aby příkaz chcon prošel všemi symbolickými odkazy, na které narazí během rekurzivní operace, měli byste zadat volbu -L.

Následující volba zkombinovala volbu -L s volbou -R. Tím projde každý symbolický odkaz, na který narazí. Například, jak vidíte níže, toto překročilo symbolický odkaz „ndd“ a podle toho zpracovalo všechny soubory.

# chcon -RLv -t httpd_config_t configuration
changing security context of ‘configuration/README’
changing security context of ‘configuration/autoindex.conf’
changing security context of ‘configuration/userdir.conf’
changing security context of ‘configuration/welcome.conf’
changing security context of ‘configuration/nss.conf’
changing security context of ‘configuration/ndd/nd1-conf’
changing security context of ‘configuration/ndd/nd2-conf’
changing security context of ‘configuration/ndd/nd3-conf’
changing security context of ‘configuration/ndd/nd-main.conf’
changing security context of ‘configuration/ndd’
changing security context of ‘configuration’

Poznámka:Když zadáváte volbu -P, nebo -H nebo -L (spolu s -R), pokud jste je z nějakého důvodu zkombinovali, vstoupí v platnost vše, co je zadáno jako poslední možnost.

15. Chcon Chcon v kořenovém adresáři pro změnu systému

Ve výchozím nastavení můžete použít chcon k rekurzivní změně kontextu SELinuxu u všech souborů ve vašem kořenovém souborovém systému, jak je uvedeno níže.

Toto se nazývá možnost nezachovat kořenový adresář (tj. výchozí chování je –no-preserve-root)

VAROVÁNÍ:Tento příkaz na vašem systému neprovádějte. Skončíte s nepoužitelným systémem. Oba následující příkazy se budou chovat úplně stejně.

chcon -Rv system_u:object_r:httpd_config_t:s0 /

chcon -Rv --no-preserve-root system_u:object_r:httpd_config_t:s0 /

Nedoporučuje se to však, pokud nevíte, co děláte, protože nechcete, aby byl kontext SELinuxu pro všechny soubory ve vašem systému stejný. Pokud jste udělali chybu a nastavili nesprávný kontext souboru, možná budete chtít pochopit, jak použít příkaz restorecon k obnovení kontextu SELinux

Když zadáte volbu –no-preserve-root, nebude procházet kořenem, když ji zadáte jako volbu příkazového řádku, jak je uvedeno níže.

# chcon -Rv --preserve-root system_u:object_r:httpd_config_t:s0 /
chcon: it is dangerous to operate recursively on `/'
chcon: use --no-preserve-root to override this failsafe

Protože výchozí chování je nebezpečné, abyste se vyhnuli náhodným chybám, kdykoli provádíte rekurzivní volbu -R na velkém adresáři (zejména ze skriptu shellu), doporučuji vám použít –preserve-root. Tímto způsobem omylem, pokud zadáte / na konci příkazu chcon, nezmění to náhodně všechny soubory ve vašem systému.


Linux
  1. Příklady příkazů setenforce v Linuxu

  2. Příklady příkazů chown v Linuxu

  3. sa Příklady příkazů v Linuxu

  1. Příklady příkazů ac v Linuxu

  2. Příklady příkazů df v Linuxu

  3. du příklady příkazů v Linuxu

  1. 7 Příklady příkazů Linux df

  2. 8 Příklady příkazů Linux TR

  3. 5 příkladů dotykových příkazů Linuxu (jak změnit časové razítko souboru)