SELinux beleid voor Zabbix maken
Jul 01 2023
Controleren of SELinux blokkeert
SELinux zorgt voor een extra beveiliging op Linux servers. Die beveiliging werkt in bepaalde gevallen beter dan het moet. Het is in die scenario's niet duidelijk of SELinux een blokkerend element is. Hiervoor kan je snel SELinux even op een toegankelijkere stand zetten. Het grote voordeel hiervan is dat er naast het ontbreken van blokkades, er wel wordt bijgehouden wat er geblokkeerd zou worden.
# Zet SELinux tijdelijk op permissive
sudo setenforce 0
Nu kan je in het audit-log controleren welke hits er gemaakt werden:
# Audit2why maakt de soms grote blob tekst beter leesbaar.
sudo cat /var/log/audit/audit.log | audit2why
Een beleid aanmaken en activeren
Als SELinux ongewenst iets blokkeert, kunnen we daar een module voor aanmaken en soms in heel simpele gevallen, kunnen we een standaard module simpelweg activeren. Deze standaard modules komen mee met de installaties van het softwarepakket.
Standaard beleid activeren
Als uit het auditlog iets vergelijkbaars met hieronder komt, kan je de lijn die daar vermeldt wordt, simpelweg uitvoeren en dan ben je klaar. Best kan je deze setting dan ook opnemen in een configuratiesysteem om ervoor te zorgen dat als je een gelijkaardige server opzet, dit meteen goed staat.
In onderstaand voorbeeld voeren we dan dit commando uit:
sudo setsebool -P zabbix_can_network 1
Zelf een beleid maken
In het geval dat er geen standaard beleid beschikbaar is voor het probleem dat je ervaart, gaat je geen oneliner terugkrijgen van SELinux en moet je zelf een beleid genereren. Dat kan je zelf met een aantal stappen. In het audit log kan dan verschillende rechten terugvinden voor bepaalde processen.
Hier zie je dat zabbix_agent_t
een blokkade krijgt. Dat is niet wenselijk. De eerste stap om hier nu een correct beleid van te maken, is via onderstaand commando waar we alle entries verzamelen die te maken hebben met zabbix_agent_t
. Dit wordt dan opgeslagen in zabbix_agent.te
in een heel leesbare vorm. Je zal in het bestand verschillende unieke overeenkomsten terugvinden.
sudo ausearch --raw | grep zabbix_agent_t | audit2allow -M zabbix_agent
Als we het zabbix_agent.te
bestand hebben uit het voorgaande proces,kunnen we van het .te-bestand
een .mod-bestand
maken en daarna ook een .pp-bestand
die SELinux kan gebruiken voor de policy te gebruiken. Dat doen we zo:
# Eerst het .mod bestand aanmaken
checkmodule -M -m -o zabbix_agent.mod zabbix_agent.te
# Daarna het .pp. Dit is de effectieve policy
semodule_package -o zabbix_agent.pp -m zabbix_agent.mod
```
Nu staat de policy in het ``.pp-bestand`` en kan je die toepassen zodat deze actief wordt in SELinux.
```bash
sudo semodule -i zabbix_agent.pp
```