V tomto článku se podrobně seznámíme se základy SELinuxu, jeho správnou integrací se Zabbixem a ukážeme si, jak efektivně vytvářet vlastní SELinux politiky pro řešení nejčastějších problémů. Dále si předvedeme, jak SELinux monitorovat přímo v Zabbixu, což vám pomůže zvýšit bezpečnost vašich systémů a zároveň usnadní každodenní administraci.
Návod je určen pro distribuce na bázi RPM. (RHEL, CentOS, Rocky Linux, ALMA, Fedora,…)
Co je SELinux a jak funguje?
SELinux (Security-Enhanced Linux) je bezpečnostní modul Linuxu, který implementuje povinné řízení přístupu (Mandatory Access Control, MAC). Na rozdíl od standardního řízení přístupu (Discretionary Access Control, DAC), kde uživatelé určují práva ke svým souborům, MAC definuje bezpečnostní politiky spravované administrátorem, které omezují akce programů a uživatelů na základě jasně definovaných pravidel.
SELinux pracuje ve třech režimech:
- Enforcing – politiky jsou vynucovány, přístup je aktivně blokován při porušení pravidel.
- Permissive – SELinux je aktivní, ale neblokuje přístup, pouze loguje porušení pravidel.
- Disabled – SELinux je zcela vypnutý.
Stav SELinux zjistíte příkazem:
sestatus
Příklad výstupu:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 33
enabled
– SELinux je aktivní.enforcing
– Politika je vynucována.targeted
– Používá se standardní cílená politika.
Zabbix balíček zabbix-selinux-policy
Balíček zabbix-selinux-policy
obsahuje specifická pravidla SELinuxu potřebná pro hladký běh Zabbix serveru, proxy a agenta, aniž by bylo nutné SELinux vypínat. Balíček je dostupný v oficiálním Zabbix repozitáři.
Instalace balíčku:
dnf install zabbix-selinux-policy
Dočasné vypnutí SELinuxu
Pokud potřebujete SELinux rychle deaktivovat, použijte:
setenforce 0
0
znamená přepnutí do režimu Permissive (vše povoleno, incidenty se pouze logují).1
znamená přepnutí zpět do režimu Enforcing (incidenty se blokují a logují).
Změna je platná jen do restartu systému. Ověřit aktuální režim:
getenforce
Permanentní vypnutí SELinuxu
Pro trvalé vypnutí SELinuxu upravte /etc/selinux/config
:
nano /etc/selinux/config
Změňte:
SELINUX=enforcing
na
SELINUX=disabled
Restartujte systém:
reboot
Opětovné zapnutí SELinuxu a relabel
Pro opětovné aktivování SELinuxu je doporučeno nejprve nastavit režim permissive
, ověřit správnost politik a teprve poté přejít do režimu enforcing
. Nastavte tedy nejprve:
SELINUX=permissive
Poté nastavte relabel:
touch /.autorelabel
reboot
Soubor .autorelabel
vytvořte přímo v /
. Tento proces po restartu nastaví správné SELinux kontexty. Kontext souborů označuje metadata, která definují, jaká SELinux pravidla se na daný soubor vztahují. Pokud by relabel neproběhl, soubory (např. /etc/passwd
) budou mít nesprávný nebo žádný kontext, což může vést k nemožnosti přihlášení.
Po ověření režimu permissive můžete přejít na enforcing. Nejprve změňte konfiguraci v souboru /etc/selinux/config
:
SELINUX=enforcing
Tato změna se aplikuje po restartu systému. Pro okamžitou aplikaci změny bez restartu použijte příkaz:
setenforce 1
Vytváření vlastních politik SELinux
Pokud SELinux blokuje operaci aplikace zabbix_server
, zjistíte to z logů auditd:
grep AVC /var/log/audit/audit.log | grep zabbix_server
Příklad záznamu:
type=AVC msg=audit(1743521737.355:209): avc: denied { name_bind } for pid=1620 comm="zabbix_server" src=10055 scontext=system_u:system_r:zabbix_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permissive=0
Tato chyba ukazuje, že SELinux brání Zabbix serveru použít port 10055. K vytvoření pravidla, které tuto akci povolí, nainstalujte nástroj audit2allow
:
dnf install policycoreutils policycoreutils-python-utils -y
Vytvořte politiku pro Zabbix server
Spusťte příkaz:
grep zabbix_server /var/log/audit/audit.log | audit2allow -m zabbix_server_policy > zabbix_server_policy.te
Co dělají jednotlivé části:
grep zabbix_server /var/log/audit/audit.log
: Vybere z audit logu pouze záznamy týkající se Zabbix serveru.audit2allow -m zabbix_server_policy
: Analyzuje výstup a vytvoří návrh politiky SELinuxu
Ukázka obsahu souboru zabbix_server_policy.te
:
module zabbix_server_policy 1.0;
require {
type krb5_keytab_t;
type unreserved_port_t;
type zabbix_t;
class dir search;
class tcp_socket name_bind;
}
#============= zabbix_t ==============
allow zabbix_t krb5_keytab_t:dir search;
#!!!! This avc can be allowed using the boolean 'nis_enable
Tento soubor obsahuje pravidla, která povolují Zabbix serveru:
- Používat konkrétní porty (např. nerezervované porty),
- Prohledávat adresáře se soubory Kerberos klíčů (
krb5_keytab_t
).
module zabbix_server_policy 1.0;
→ Název a verze modulu.
require { ... }
→ Modul potřebuje přístup k těmto věcem:
krb5_keytab_t
→ soubory s Kerberos klíči (např./etc/krb5.keytab
)unreserved_port_t
→ běžné síťové portyzabbix_t
→ proces Zabbix serverudir search
→ umožňuje procházet adresářetcp_socket name_bind
→ umožňuje bindnout se na TCP port
allow zabbix_t krb5_keytab_t:dir search;
→ Zabbix může procházet adresář s Kerberos klíčem.
#!!!! This avc can be allowed using the boolean 'nis_enable'
→ Komentář: něco podobného by šlo povolit pomocí booleanu 'nis_enable
.'
Bezpečnostní poznámka:
Tento příklad zároveň ukazuje potenciální nevýhodu automatizovaného vytváření pravidel pomocí audit2allow
.
Může dojít k tomu, že se spolu s potřebnými pravidly omylem povolí i přístupy, které nejsou žádoucí – například k souborům s Kerberos klíči.
Proto je důležité výstup ze audit2allow
pečlivě zkontrolovat a upravit, než se politika zkompiluje a aplikuje.
Dále pravidlo zkompilujte a aplikujte:
checkmodule -M -m -o zabbix_server_policy.mod zabbix_server_policy.te
semodule_package -o zabbix_server_policy.pp -m zabbix_server_policy.mod
semodule -i zabbix_server_policy.pp
checkmodule -M -m
: Zkompiluje.te
soubor do.mod
modulu.semodule_package
: Převede.mod
soubor na.pp
instalační balíček.semodule -i
: Instaluje vytvořený balíček politik do systému SELinux.
Ověření aplikace politiky:
semodule -l | grep zabbix_server_policy
Výstup by měl ukázat nainstalovanou politiku zabbix_server_policy
, což potvrzuje její úspěšnou aplikaci do systému SELinux.
Pro vylistování SELinux politik například pro Zabbix použijte
semodule -l | grep zabbix
Tento příkaz zobrazí všechny aktuálně nainstalované SELinux moduly, které mají v názvu „zabbix“.
zabbix
zabbix_server_policy
Chcete-li si zobrazit, jaká pravidla obsahuje konkrétní SELinux modul (např. zabbix_server_policy
), můžete použít následující postup:
mkdir -p /tmp/policyview && \
cd /tmp/policyview && \
semodule --extract zabbix_server_policy && \
strings zabbix_server_policy.pp
Doplnění existující SELinux politiky o nové pravidlo
Pokud potřebujete později doplnit existující politiku o další pravidlo, upravte existující .te
soubor (např. přidejte další allow
pravidlo) a opakujte celý postup kompilace a aplikace politiky:
checkmodule -M -m -o zabbix_server_policy.mod zabbix_server_policy.te
semodule_package -o zabbix_server_policy.pp -m zabbix_server_policy.mod
semodule -i zabbix_server_policy.pp
SELinux automaticky aktualizuje existující politiku novými pravidly, aniž by bylo nutné původní politiku odstraňovat.
grep zabbix_server /var/log/audit/audit.log | audit2allow -m zabbix_server_policy > zabbix_server_policy.te
Jak odstraním vlastní SELinux politiku?
Použijte příkaz semodule
:
semodule -r zabbix_server_policy
Monitoring SELinuxu pomocí Zabbixu
Abychom mohli SELinux monitorovat, musíme nejdříve získat oprávnění ke čtení příslušného log souboru. Bezpečnou cestou je přesměrovat jeho obsah do samostatného souboru, který bude vytvořen speciálně pro náš účel a dostupný pro Zabbix agenta – nikoliv změnou oprávnění na původních systémových souborech, čímž zachováme bezpečnostní standardy systému.
NASLEDUJCI SEKCE JE TODO
Přesměrování SELinux logů
Vytvoř nebo uprav /etc/rsyslog.d/auditd-forward.conf
:
nano /etc/rsyslog.d/auditd-forward.conf
A dej tam:
:programname, isequal, "auditd" /var/log/zabbix/selinux_audit.log
& stop
Poté restartuj rsyslog:
systemctl restart rsyslog
Logrotate pro nový log
Vytvoř /etc/logrotate.d/zabbix_selinux_audit
:
nano /etc/logrotate.d/zabbix_selinux_audit
A vlož:
/var/log/zabbix/selinux_audit.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
create 0644 zabbix zabbix
postrotate
/bin/systemctl reload rsyslog >/dev/null 2>&1 || true
endscript
}
Doporučení: SELinux je důležitou součástí zabezpečení systému a obecně není doporučeno jej vypínat. Balíček zabbix-selinux-policy
řeší většinu běžných problémů se Zabbixem, ale nestandardní operace (např. specifické porty nebo přístup k nestandardním souborům) musí administrátor řešit vlastními politikami, jak je popsáno výše. Investujte proto čas do studia SELinux, abyste mohli efektivně spravovat bezpečnostní politiky.
Dejte nám Like, sdílejte nás nebo nás sledujte 😍
Ať vám nic neunikne: