Na vašem linuxovém serveru je velmi důležité mít správný kontext zabezpečení SELinux pro soubory a adresáře.
Když přidáte svůj vlastní soubor do adresáře, který je již spravován zásadami SELinux, a pokud váš vlastní soubor nemá správný kontext SELinux, nezískáte očekávaný výsledek.
restorecon je zkratka pro Restore SELinux Context.
příkaz restorecon resetuje kontext zabezpečení SELinux pro soubory a adresáře na výchozí hodnoty. Toto pouze resetuje atribut type kontextu SELinux.
V tomto tutoriálu vysvětlíme, jak používat příkaz restorecon, na několika praktických příkladech.
1. Obnovení kontextu souboru SELinux
V následujícím příkladu má soubor index.html v kontextu SELinux pro typ „user_home_t“. To je špatně a Apache nebude moci tento soubor obsluhovat. V error_log pro apache s tímto kontextem zabezpečení uvidíte oprávnění odepřeno.
# cd /var/www/html # ls -lZ index.html -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 index.html
Poznámka:Volba Z (velké Z) ve výše uvedeném příkazu ls zobrazí kontext SELinux pro konkrétní soubor.
Když používáme příkaz restorecon, opravdu nemusíme znát správný původní kontext zabezpečení souboru. restorecon to zjistí za nás automaticky.
Následující příklad obnoví kontext zabezpečení souboru index.html na správnou hodnotu. Jak vidíte níže, resetoval typovou část kontextu SELinux na „httpd_sys_content_t“. Toto je správný typ. Nyní bude Apache schopen poskytnout tento soubor bez jakékoli chyby.
# restorecon index.html # ls -lZ index.html -rw-rw-r--. centos centos unconfined_u:object_r:httpd_sys_content_t:s0 index.html
2. Zobrazit změnu kontextu zabezpečení na obrazovce
Ve výchozím nastavení vám při provádění příkazu restorecon neřekne, zda to změnilo linuxový kontext zabezpečení souboru.
v znamená verbózní. Volba -v zobrazí na obrazovce předchozí kontext zabezpečení a nově změněný kontext selinux, jak je uvedeno níže.
# restorecon -v index.html restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
3. Použijte zástupný znak ke zpracování více objektů
Stejně jako jakýkoli jiný příkaz Linuxu můžete také použít zástupné znaky pro názvy souborů, jak je uvedeno níže.
To ovlivní všechny soubory končící příponou .html v aktuálním adresáři
restorecon -v *.html
To ovlivní všechny soubory v aktuálním adresáři.
restorecon -v *
To ovlivní všechny soubory v adresáři /var/www/html.
restorecon -v /var/www/html/*
To ovlivní všechny soubory končící buď .htm (nebo) .html (nebo) .htm s libovolným jiným samostatným znakem na konci.
restorecon -v *.htm?
4. Zpracovávat soubory a adresáře rekurzivně
Můžete také obnovit kontext zabezpečení souborů rekurzivně. Použijte volbu -R, jak je uvedeno níže. Zde kombinujeme R s možností v.
Tím se resetuje kontext nebo všechny soubory ve /var/www/html a v jeho podadresářích.
# restorecon -vR /var/www/html restorecon reset /var/www/html/sales/graph.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
Pro rekurzivní můžete také použít malé r. Následující příkaz je přesně stejný jako výše uvedený příkaz.
# restorecon -vr /var/www/html
5. Uložit seznam souborů s nesprávným kontextem SELinux
Když resetujete kontext SELinux pro velkou sadu souborů a chcete vidět pouze změněný soubor, můžeme použít volbu -v, jak bylo vysvětleno dříve. Tím se však zobrazí pouze na obrazovce.
Pokud chcete do výstupního souboru zachytit seznam souborů s nesprávným kontextem zabezpečení, použijte volbu -o.
o znamená výstupní soubor.
V následujícím příkladu ukládáme seznam souborů, které byly ovlivněny příkazem restorecon, do souboru changes.log.
# restorecon -vR -o changed.log /var/www/html restorecon reset /var/www/html/about.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/contact.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/data.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/sales context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/sales/graph.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
Jak očekáváme, tento soubor changes.log bude obsahovat seznam dotčených názvů souborů spolu s úplnou cestou, jak je uvedeno níže.
# cat changed.log /var/www/html/about.html /var/www/html/contact.html /var/www/html/data.html /var/www/html/index.html /var/www/html/sales /var/www/html/sales/graph.html
6. Obnovit kontext na základě vstupního souboru
Můžete také obnovit kontext zabezpečení seznamu souborů, které máte ze vstupního souboru.
V následujícím adresáři /var/www/html mají všechny tyto soubory aktuálně nesprávný kontext zabezpečení.
# ls -lZ -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 about.html -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 contact.html -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 data.html -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 index.html drwxrwxr-x. centos centos unconfined_u:object_r:user_home_t:s0 sales
Vytvořte soubor input.txt, jak je znázorněno níže, který bude mít pouze dva soubory. Zde byste měli zadat úplnou cestu k názvu souboru včetně adresáře.
# cat input.txt /var/www/html/about.html /var/www/html/data.html
Chcete-li zadat tento vstupní soubor v restorecon, použijte volbu -f, jak je uvedeno níže. Tím se změní kontext SELinux pouze pro about.html a data.html, jak je uvedeno níže.
# restorecon -vf input.txt restorecon reset /var/www/html/about.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/data.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
Použijte příkaz ls -lZ k ověření, že se změnil pouze kontext zabezpečení těchto dvou souborů.
# ls -lZ -rw-rw-r--. centos centos unconfined_u:object_r:httpd_sys_content_t:s0 about.html -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 contact.html -rw-rw-r--. centos centos unconfined_u:object_r:httpd_sys_content_t:s0 data.html -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 index.html -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 input.txt drwxrwxr-x. centos centos unconfined_u:object_r:user_home_t:s0 sales
Poznámka:Místo zadání input.txt můžete také zadat – což bude vyžadovat seznam vstupních souborů ze standardního vstupu.
7. Ignorovat soubory, které neexistují
V následujícím příkladu jsme vytvořili input.txt, který obsahuje seznam několika souborů. Tento seznam použijeme k resetování kontextu zabezpečení.
# cat input.txt /var/www/html/about.html /var/www/html/meeting.html /var/www/html/directions.html /var/www/html/data.html
Ale jak je ukázáno níže, zobrazí se chybová zpráva, když konkrétní soubor ve výše uvedeném seznamu není přítomen.
# restorecon -f input.txt restorecon: lstat(/var/www/html/meeting.html) failed: No such file or directory restorecon: lstat(/var/www/html/directions.html) failed: No such file or directory
Chcete-li se tomu vyhnout, můžete použít volbu -i. stojím za ignorovat. Jak vidíte níže, následující příkaz s volbou -i nezobrazuje žádnou z výše uvedených chybových zpráv o chybějícím souboru. To jednoduše ignoruje chybějící soubory a pokračuje se zbytkem souborů v souboru input.txt.
# restorecon -if input.txt #
8. Proveďte pouze Dry-Run of Restore SELinux Context
Namísto skutečné změny kontextu SELinuxu souborů můžete pouze zobrazit, které soubory by se mohly potenciálně změnit pomocí volby -n.
Volba -n je jako suchý běh.
Když toto použijete, projde všemi pohyby při provádění příkazu restorecon, ale ve skutečnosti nic neudělá.
Jak vidíte níže, provedli jsme restorecon s volbou -n u všech souborů v adresáři /var/www/html.
# restorecon -nv /var/www/html/* restorecon reset /var/www/html/about.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/contact.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/data.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/sales context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
Přestože výše uvedený výstup restorecon ukazuje, že se kontext SELinuxu pro několik souborů změnil, ve skutečnosti nic neudělal, protože jsme použili volbu -n.
Když provedete ls -lZ, jak je ukázáno níže, můžete vidět, že kontext SELinuxu se ve skutečnosti nezměnil.
# ls -lZ /var/www/html -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 about.html -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 contact.html -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 data.html -rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 index.html drwxrwxr-x. centos centos unconfined_u:object_r:user_home_t:s0 sales
9. Zobrazení aktuálního průběhu během velké operace
Když obnovujete kontext SELinux několika souborů, příkaz může chvíli trvat. Pokud chcete vědět, co příkaz aktuálně dělá, můžete zvolit volbu -p.
Volba -p zobrazí počet souborů, které dosud zpracovala, v přírůstcích 1000 souborů. p znamená pokrok.
Jak vidíte níže, zde resetuji kontext SELinuxu všech souborů v adresáři /var rekurzivně pomocí volby -p.
To ukazuje, že v současnosti je zpracováno 2k souborů (2000 souborů).
# restorecon -pr /var 2k
Poznámka:Pokud resetujete kontext SELinux pro všechny soubory ve vašem operačním systému pomocí volby -p, zobrazí se aktuální procento dokončení.
10. Vyloučit adresáře ke zpracování
Adresář, který má být zpracován, můžete také vyloučit pomocí volby -e. e znamená Vyloučit.
V následujícím příkladu zpracováváme všechny soubory v adresáři /var/www/html, ale vyjma souborů z podadresáře /var/www/html/sales.
# restorecon -e /var/www/html/sales -Rv /var/www/html restorecon reset /var/www/html/about.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/contact.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/data.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
Vezměte prosím na vědomí, že byste měli použít úplnou cestu k adresáři ve volbě -e. Pokud ne, zobrazí se následující chybová zpráva.
# restorecon -e sales -Rv /var/www/html Full path required for exclude: sales.
Můžete také vyloučit více adresářů poskytnutím více možností -e, jak je uvedeno níže.
Následující vyloučí ze zpracování prodejní i marketingový adresář.
restorecon -e /var/www/html/sales -e /var/www/html/marketing -Rv /var/www/html