Oprava SELinuxu na Linuxovém serveru, identifikovat zamítnutí v protokolech auditu, opravit popisky souborů pomocí restorecon nebo semanage fcontext, upravte booleovské hodnoty služeb pomocí setsebool a pouze v případě potřeby vytvořte minimální lokální zásady pomocí audit2allow.
Ověřte v permisivním režimu a poté se pro plnou ochranu přepněte zpět do režimu vynucení. Pokud vás zajímá, jak opravit SELinux v prostředích linuxových serverů bez oslabení zabezpečení, je tento průvodce určen právě vám.
Projdeme si rychlou diagnostiku, bezpečné opravy a příklady z reálného světa, které řeší nejčastější problémy SELinuxu na systémech RHEL, CentOS, AlmaLinux, Rocky Linux a Fedora.
Co je SELinux a proč (někdy) něco kazí
SELinux je povinný systém řízení přístupu (MAC), který vynucuje zásady pro to, které procesy mohou přistupovat ke kterým souborům, portům a zdrojům.

Pokud blokuje neočekávaný přístup, může se v aplikaci zobrazovat zpráva „Oprávnění odepřeno“, i když oprávnění Unixu vypadají správně. Oprava spočívá v sladění popisků, booleovských hodnot a zásad s vaší pracovní zátěží.
Režimy SELinux
- Vynucování: Zásady jsou vynucovány, zamítnutí jsou zaznamenávána.
- Permisivní: Zásady nejsou vynucovány, zamítnutí jsou pouze zaznamenávána (skvělé pro ladění).
- Zakázáno: SELinux je vypnutý (v produkčním prostředí se mu vyhněte).
Popisky, typy a booleovské hodnoty (základní koncepty)
Každý soubor a proces má zabezpečení kontext jako uživatel:role:typ:úroveň. typ je to, co je v „cílené“ politice nejdůležitější. Služby očekávají specifické typy (například Apache čte httpd_sys_content_t). Booleovské hodnoty jsou přepínače, které umožňují širší akce (například umožnění Apache připojit se k síti).
Rychlý diagnostický kontrolní seznam (5 minut)
Krok 1: Zkontrolujte režim SELinux
getenforce
sestatusPokud musíte ladit rychle, přepněte na permisivní (dočasný) režim, chybu reprodukujte a poté se přepněte zpět.
# temporary (until reboot)
sudo setenforce 0 # permissive
sudo setenforce 1 # enforcingKrok 2: Najděte odmítnutí
# show recent AVC denials (last hour)
sudo ausearch -m avc -ts now-1h | aureport -a
# or inspect audit log directly
sudo grep -i "avc" /var/log/audit/audit.log | tail -n 50
# if setroubleshoot is installed
sudo sealert -a /var/log/audit/audit.logHledejte zakázanou třídu (soubor, adresář, tcp_socket) a typové štítky zdroje (proces) a cíle (soubor/port).
Krok 3: Identifikace dotčené cesty/služby
Je to problém s popiskem souboru, nepovoleným portem nebo funkcí blokovanou booleovskou hodnotou? Následující části mapují každý příznak na bezpečné řešení.
Jak opravit SELinux na Linuxovém serveru - (Krok za krokem)
Oprava 1: Špatně označené soubory nebo adresáře
Většina chybných adresářů pochází z nesprávných popisků. Obnovte výchozí popisky pro známé cesty nebo nastavte trvalé popisky pro vlastní adresáře.
# restore default labels for a path
sudo restorecon -Rv /var/www/html
# define a persistent label for a custom app dir
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/myapp(/.*)?"
sudo restorecon -Rv /var/www/myappPokud jsou popisky celého systému nekonzistentní (po větším přesunu nebo obnově souborového systému), po restartu je znovu pojmenujte.
sudo touch /.autorelabel
sudo rebootOprava 2: Povolit službám používat vlastní porty
Služby se mohou vázat pouze na porty určitých typů. Namapujte svůj vlastní port na správný typ portu SELinux.
# example: allow Apache/Nginx to bind TCP 8080
sudo semanage port -a -t http_port_t -p tcp 8080
# verify
sudo semanage port -l | grep http_port_tOprava 3: Povolení požadovaných booleovských hodnot SELinuxu
Booleovské hodnoty umožňují širší chování, jako je síťová připojení, přístup NFS/SMB nebo uživatelské adresáře. Změny lze trvale nastavit pomocí -P.
# list all booleans
sudo getsebool -a | less
# common web-related booleans
sudo setsebool -P httpd_can_network_connect on
sudo setsebool -P httpd_enable_homedirs on
sudo setsebool -P httpd_use_nfs on
sudo setsebool -P httpd_use_cifs onOprava 4: Generování minimální lokální politiky (poslední možnost)
Pokud jsou popisky a booleovské hodnoty správné, ale legitimní přístup je stále odepřen, vytvořte malou lokální politiku z auditovaných odepření. Pečlivě si ji projděte, abyste se vyhnuli příliš permisivním pravidlům.
# inspect and understand the denial
sudo grep -i "avc" /var/log/audit/audit.log | audit2why | less
# generate a local module for a specific service pattern
sudo grep httpd /var/log/audit/audit.log | audit2allow -M myhttpd
sudo semodule -i myhttpd.ppIhned znovu otestujte. Pokud je modul příliš široký, odstraňte ho a upřesněte.
# list and remove a custom module
sudo semodule -l | grep myhttpd
sudo semodule -r myhttpdOprava 5: Kontejnery a připojené svazky (Docker/Podman)
Kontejnery potřebují správně označené objemy. Použijte :Z pro soukromou relabelaci, :z pro sdílené.
# Docker/Podman volume with SELinux relabel
docker run -v /srv/app:/var/www/html:Z -p 8080:80 nginx
# or
podman run -v /srv/app:/var/www/html:Z -p 8080:80 nginxPokud musíte sdílet stejný adresář mezi více kontejnery, použijte :zNezakazujte popisky uvnitř kontejnerů, pokud neprovádíte testování.
Oprava 6: Sdílení NFS/SMB
NFS a CIFS mají speciální kontexty a booleovské hodnoty. Ujistěte se, že připojení používají kompatibilní možnosti a že je vaše služba může číst.
# allow web server to access NFS/CIFS content
sudo setsebool -P httpd_use_nfs on
sudo setsebool -P httpd_use_cifs on
# label the mount point appropriately
sudo semanage fcontext -a -t httpd_sys_content_t "/mnt/webdata(/.*)?"
sudo restorecon -Rv /mnt/webdataBezpečná řešení a úskalí
Používejte permisivní režim pouze pro ladění
Povolený režim vám pomáhá zachytit zamítnutí, aniž by to narušilo aplikace. Opravte hlavní příčinu a poté se vraťte k vynucování. Ponechání serveru v povoleném režimu s sebou nese riziko.
Vyhněte se zakázání SELinuxu
Zakázání SELinuxu odstraní celou vrstvu ochrany. Pokud musíte režim trvale změnit, upravte konfiguraci a restartujte počítač – ale snažte se jej vynutit v produkčním prostředí.
sudo vi /etc/selinux/config
# SELINUX=enforcing|permissive|disabled
sudo rebootZnovu označit po hromadném přesunutí nebo obnovení
Pokud jste provedli obnovu ze zálohy, změnili souborové systémy nebo použili rsync bez xattrs, kontexty mohou být nesprávné. Úplné přejmenování zajišťuje konzistenci zásad v celém systému.
Příklady oprav z reálného světa
Apache/Nginx 403 Po nasazení
Příznak: HTTP 403 nebo „Oprávnění odepřeno“ v protokolech po přesunutí webu na /var/www/myapp.
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/myapp(/.*)?"
sudo restorecon -Rv /var/www/myappWebová aplikace potřebuje odchozí volání API
Příznak: PHPAplikace /Python se nemůže připojit k externím API.
sudo setsebool -P httpd_can_network_connect onMariaDB v adresáři vlastních dat
Příznak: MariaDB se nepodaří spustit nebo načíst data na /data/mysql.
sudo semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
sudo restorecon -Rv /data/mysqlNginx Proxy na portu 8080
Příznak: Nginx Nelze se navázat na 8080, i když je volný.
sudo semanage port -a -t http_port_t -p tcp 8080
sudo systemctl restart nginxPřístup k svazku Dockeru byl zamítnut.
Příznak: Kontejnerizovaná aplikace dostane chybu „Oprávnění odepřeno“ s připojením vazby.
docker run -v /srv/app:/var/www/html:Z image:tagMonitorování, protokolování a udržování oprav
Použijte správné nástroje
- auditováno a
/var/log/audit/audit.logpro autoritativní popření. - řešení problémů (
setroubleshoot-server) abyste získali rady čitelné pro člověkasealert. - policycoreutils for
semanage,restorecon,setsebool,semodule.
Zajištění perzistence i po restartech
- Použijte
semanage fcontextpro zachování popisků souborů. - Použijte
setsebool -Ppro trvalé booleovské změny. - Vlastní zásady dokumentu (
semodule) a udržovat je pod kontrolou verzí.
Nejlepší postupy pro týmy a nasazení
- Štítky plánu během návrhu aplikace: pokud možno zvolte datové adresáře zarovnané s výchozími typy.
- Automatizovat s Ansible: použití
sefcontext,seboolean, aseportmoduly pro vynucení stavu. - Test v permisivním režimu v připravování zachytit odmítnutí, opravit a poté odeslat s vynucením v produkčním prostředí.
- Preferovat booleovské hodnoty a popisky před vlastními zásadami; udržujte lokální moduly minimalistické a specifické.
- Ověření po upgraduAktualizace zásad mohou změnit očekávané chování – znovu ověřit klíčové služby.
Kdy vyhledat pomoc (a jak) YouStable Může pomoci)
Pokud se problémy se SELinuxem opakují, zvažte kontrolu konfigurace. YouStable, Naše managed Linuxový hosting a server Odborníci předběžně zajišťují zabezpečení obrazů, sladí zásady SELinuxu s vaším stackem a monitorují protokoly auditu, aby vaše aplikace zůstaly zabezpečené a dostupné – bez nutnosti pokusů a omylů. Potřebujete pomoc 24 hodin denně, 7 dní v týdnu? Náš tým je vám k dispozici.
FAQs
1. Jak zjistím, zda SELinux něco blokuje?
Použijte ausearch -m avc -ts now-1h nebo zkontrolovat /var/log/audit/audit.log pro položky „AVC“. Pokud setroubleshoot je nainstalován, spusťte sealert -a /var/log/audit/audit.log pro srozumitelné pokyny. V zamítnutí bude uvedeno, který typ procesu se pokusil o přístup ke kterému souboru/typu portu a proč byl zablokován.
2. Je bezpečné zakázat SELinux v produkčním prostředí?
Ne. SELinux výrazně snižuje dopad narušení zabezpečení omezením služeb. Pro ladění dočasně použijte permisivní režim, opravte popisky/booleovské hodnoty a vraťte se k vynucování. Zakázání SELinuxu by mělo být až krajní možností a obvykle indikuje konfigurační dluh, který je třeba vyřešit.
3. Jak trvale změním režim SELinuxu?
Změnit /etc/selinux/config a nastavte SELINUX=enforcing or permissivea poté restartujte. Vyhněte se disabledMěnící se s setenforce je dočasné a resetuje se po restartu. Po přepnutí z vypnutého stavu na vynucený stav spusťte úplné přejmenování (/.autorelabel).
4. Jak můžu dovolit Apache použít vlastní docroot a dosáhnout vzdálené databáze?
Označte docroot a povolte odchozí síťová připojení. Například: semanage fcontext -a -t httpd_sys_content_t "/var/www/myapp(/.*)?", restorecon -Rv /var/www/myapp, pak setsebool -P httpd_can_network_connect onPokud používáte NFS/SMB, povolte také httpd_use_nfs or httpd_use_cifs.
5. Jak opravím chybu „Oprávnění odepřeno“ v Dockeru na připojených svazcích pomocí SELinuxu?
Připojit :Z or :z k připojení svazku, aby se cesta k hostiteli přejmenovala pro použití v kontejneru: -v /host/path:/container/path:ZTím se zachovává omezení SELinuxu a zároveň se kontejneru udělují správné popisky pro bezpečný přístup k souborům.
Zvládnutí těchto kroků vám pomůže rychle a správně opravit SELinux na linuxových serverech a zároveň zachovat bezpečnost. Pokud chcete, aby se o to postarali odborníci, YouStableJe manageTým d serveru dokáže implementovat, monitorovat a spravovat zásady SELinuxu přizpůsobené vašemu stacku.
