page header photo

september 2016 Archieven

Nagios en SELinux gaan wél samen


Geplaatst door stefan op 2016-09-29 12:07:02 | Permanente link | Categorie: Systeembeheer | Reacties: 0

Nagios is populaire software voor het monitoren van een IT infrastructuur. Het heeft een lange historie, is zeer bekend en je komt het regelmatig tegen bij verschillende bedrijven die iets met IT infrastructuur doen. Het installeren er van is dan ook welbesproken.

Hulp bij installatie

De installatie van Nagios voor het inrichten van een monitoringsomgeving is een klus welke veelvuldig beschreven staat op internet. Twee van zulke bronnen zijn de Nagios Fedora Quickstart en DigitalOcean - How To Install Nagios 4, en zo nog vele meer. Hartstikke handig dat er zoveel over te vinden is. Alleen in mijn ogen gaat het merendeel van deze bronnen wat kort door de bocht wanneer de installatie plaatsvind op een Linux distributie afkomstig uit de Red Hat schuur. Op dergelijke distributies, zoals RHEL, CentOS of Fedora, wordt doorgaans gebruik gemaakt van een beveiligingsmodel genaamd SELinux. En in veel van de installatiehandleidingen wordt SELinux over het hoofd gezien of simpelweg uitgeschakeld.

Wat doet SELinux?

SELinux zorgt voor strakkere beveiliging van een Linux systeem, t.o.v. de bekende eigenaar, groep en mode permissies, door regels te hanteren die bepalen wat gebruikers en programma's mogen op een systeem. Systeembeheerders willen nog wel eens tegen de schenen van SELinux trappen wanneer ze iets voor elkaar proberen te krijgen op een systeem. Dan slaagt een net geïnstalleerd programma er bijvoorbeeld niet in naar een bepaalde file te schrijven omdat SELinux dat niet toestaat. Dikwijls doordat niet de juiste speciale SELinux rechten zijn toegekend aan een file of directory. Gevolg is dat het vers geïnstalleerde programma dan niet functioneert...

Minder handig

Een snelle oplossing is dan het uitschakelen van SELinux voor het hele systeem. Dan kan door middel van het commando setenforce 0 te geven als root gebruiker. Of meer permanent door in de SELinux configuratie file het beleid op Permissive te zetten in plaats van Enforcing, waardoor overtredingen enkel nog gelogd worden maar niet geblokkeerd. Wat weliswaar handig kan zijn om vervolgens een policy te maken zodat je weer terug kunt naar een Enforcing beleid.

Het uitschakelen van SELinux daar houd ik niet zo van. SELinux wordt niet voor niets standaard actief afgeleverd in een CentOS of Fedora Linux installatie. Het zorgt voor strakkere beveiliging doordat applicaties alleen de rechten krijgen die ze nodig hebben om te draaien. Een applicatie krijgt, min of meer, zijn eigen tuintje. Zolang de applicatie binnen dat tuintje blijft is er niets aan de hand. Maar zodra er geprobeerd wordt om buiten het ingerichtte tuintje te graven staat SELinux voor de poort. Zo kan een applicatie, kwaadwillend of niet, alsnog geen schade aanrichten op plaatsen waar deze applicatie geen toegang tot heeft.

Probleem

Wie een recente versie van Nagios wil gebruiken op een stabiele distributie zoals CentOS, of wie zelf wat wil veranderen aan de standaard configuratie van Nagios, zal deze gaan compileren vanuit de broncode. En dat geldt ook voor de beschikbare Nagios Plugins. Waar je na installatie op een Linux systeem met ingeschakelde SELinux dan tegen aanloopt is een niet-bruikbare Nagios webinterface.

De Nagios webinterface geeft als foutmelding "Unable to get process ID" en verschillende CGI scripts waarmee pagina's worden gegenereerd mogen niet worden uitgevoerd.

Gelukkig is daar wat aan te doen, zonder SELinux uit te schakelen.

Op zoek naar een oplossing

Na installatie vanaf source is Nagios geïnstalleerd in de directory /usr/local/nagios/. Van die directory en onderliggende directories zullen we het SELinux context type nog goed moeten zetten.

Met chcon kan de SELinux security context van files tijdelijk worden aangepast. Dat is alleen wel redelijk "tijdelijk" omdat de security context voor die files weliswaar door chcon wordt aangepast, maar niet wordt opgeslagen als regel in de SELinux configuratie. Mocht er een SELinux context relabeling run voorbij komen dan zal deze de afwijkende security context overschrijven met een context volgens de SELinux configuratie en gaan de "tijdelijke" wijzigingen verloren. Door de configuratie van SELinux uit te breiden is dat te verhelpen. Meer over het permanent maken van de SELinux context configuratie volgt na deze sectie.

Met chcon en wat snuffelen in de audit logs (doorgaans onder /var/log/audit) kun je proberen het probleem op te lossen. Vaak al door geschikte SELinux type context toe te kennen aan de files in kwestie.

Voor de Nagios directory is de context op disk te wijzigen als volgt:

# chcon -R -t httpd_sys_content_t /usr/local/nagios

Nu worden alle onderliggende subdirectories en files, vanwege de -R vlag, voorzien van het SELinux context type dat staat gespecificeerd achter de -t vlag.

Maar we zijn er nog niet. Er staan ook nog CGI scripts in /usr/local/nagios/sbin welke als uitvoerbaar door de webserver moeten worden aangemerkt. Dat kan met het volgende commando:

# chcon -R -t httpd_sys_script_exec_t /usr/local/nagios/sbin/

Probeer nu nogmaals in te loggen op je Nagios webinterface. Nu zou het een werkend geheel moeten zijn. Herstart eventueel je Nagios en Apache daemons mocht je nog tegen problemen aanlopen.

Maak je gebruik van (externe) Nagios commando's, zoals mogelijk via NSCA, dan zul je de var/rw subdirectory ook nog beschrijfbaar moeten maken voor de scripts. Dat kan met:

# chcon -R -t httpd_sys_script_rw_t /usr/local/nagios/var/rw

Hopelijk heb je nu een goed werkende Nagios monitoring en kunnen de wijzingen worden toegevoegd aan de SELinux configuratie.

Een gevonden oplossing implementeren

In de documentatie van Red Hat is te vinden hoe zowel tijdelijke als permanente wijzigingen gemaakt kunnen worden in de SELinux context en configuratie. Veranderingen worden opgelagen in files onder de /etc/selinux/targeted/contexts/files/ directory. Het beheren van SELinux wijzigingen wordt gedaan met een tool genaamd semanage. Dit tool heeft CentOS 7 niet standaard aan boord en zal moeten worden geïnstalleerd. Het package policycoreutils-python bevat de gewenste semanage tool.

# yum install policycoreutils-python

Als de installatie daarvan is gelukt kunnen we semanage gaan gebruiken om de Nagios directories toe te voegen aan de SELinux context lijst. Deze tool lijkt in het gebruik wel wat op chcon. Met de volgende commando's kun je de voorgaande chcon wijzigingen vastleggen in de SELinux configuratie:

# semanage fcontext -a -t httpd_sys_content_t "/usr/local/nagios(/.*)?"
# semanage fcontext -a -t httpd_sys_script_exec_t "/usr/local/nagios/sbin(/.*)?"
# semanage fcontext -a -t httpd_sys_script_rw_t "/usr/local/nagios/var/rw(/.*)?"

Nu zal de SELinux context lijst uitgebreid zijn met deze wijzigingen. Een manier om dat te controleren is door een SELinux context relabel uit te voeren met restorecon. Door de vlag -R mee te geven zal ook deze recursief door de directoryboom lopen en met de -v vlag wordt de tool mondiger en toont de files waarvan de context wordt gewijzigd. Om deze over de Nagios directory te laten lopen:

# restorecon -v -R /usr/local/nagios

Wanneer je nu geen verdere output krijgt worden er geen files aangepast en is de configuratie die je met semanage hebt toegevoegd goed aangekomen.

Nu zou de Nagios omgeving ook moeten blijven werken na een SELinux relabeling run.