Kennisbank / SELinux AVC denials

SELinux AVC-denials oplossen: contexts, booleans en policy

Auteur: DEWOLF.IT

SELinux AVC-denials geven informatie over een geweigerde handeling, geen automatisch advies om de beveiliging uit te zetten. Door procesdomein, doeltype en gevraagde permissie te koppelen aan de bedoeling van de service kun je gericht herstellen.

Scope: RHEL 8/9 met SELinux targeted policy; voorbeelden gebruiken Apache httpd op een afwijkend documentpad.

Toepassing. RHEL 8/9 met SELinux targeted policy. Voorbeelden gebruiken Apache httpd en een eigen documentroot /srv/dewolf-web. Het pad is een generiek voorbeeld, geen configuratie van een klant.

Probleem en achtergrond: Linux-rechten zijn één controlelaag

Een proces kan Unix-rechten hebben en toch geen bestand mogen lezen. SELinux beoordeelt onder andere het procesdomein, het doeltype, de objectklasse en de gevraagde handeling. Een AVC-denial legt de geweigerde toegang vast. De diagnose moet uitwijzen of de toegang gewenst is, niet alleen hoe je de melding laat verdwijnen.

Begin met het tijdstip en de concrete gebruikershandeling. Noteer wat is veranderd: een nieuw documentpad, een container-volume, een extra poort of een andere serviceconfiguratie. Een gerichte reproductie levert beter bewijs op dan een policy genereren uit alle historische auditmeldingen.

1. Verbind de fout met audit en proces

getenforce
sudo systemctl status httpd --no-pager -l
sudo journalctl -u httpd --since '15 minutes ago' --no-pager
sudo ausearch -m AVC,USER_AVC -ts recent -i
ps -eZ
ls -ldZ /srv/dewolf-web

Lees scontext als de broncontext en tcontext als de doelcontext; tclass benoemt het soort object. De permissie tussen accolades, bijvoorbeeld read of name_connect, vertelt welke handeling werd geweigerd. Let ook op permissive: een auditmelding in permissive-modus bewijst niet dat die handeling door SELinux is geblokkeerd.

Controleer naast SELinux de normale rechten, parent directories en de eigen applicatielogs. Ontbrekende auditmeldingen sluiten SELinux niet altijd uit: logging kan onvolledig zijn of bepaalde denials kunnen door dontaudit-regels worden onderdrukt. Onderzoek eerst de logvoorziening en gebruik gerichte diagnostiek volgens de Red Hat SELinux-handleiding.

2. Onderscheid een verkeerd label van een ontbrekende padregel

matchpathcon /srv/dewolf-web/index.html
matchpathcon -V /srv/dewolf-web/index.html
sudo semanage fcontext -l -C
sudo restorecon -nRv /srv/dewolf-web

matchpathcon vergelijkt het pad met de verwachte context. restorecon -n toont wat een herstel zou veranderen zonder de labels te wijzigen. semanage fcontext -l -C toont lokale uitzonderingen. Een label kan technisch overeenkomen met de huidige padregel, terwijl die padregel niet past bij het nieuwe gebruik als webcontent.

3. Maak een bewuste padkeuze blijvend

Voor uitsluitend leesbare webcontent onder dit voorbeeldpad kun je een blijvende mapping vastleggen en vervolgens de labels toepassen. Doe dit pas nadat is vastgesteld dat de directory inderdaad alleen de bedoelde content bevat. De Red Hat-gids voor afwijkende serviceconfiguraties beschrijft deze combinatie van semanage en restorecon.

sudo semanage fcontext -a -t httpd_sys_content_t '/srv/dewolf-web(/.*)?'
sudo restorecon -Rv /srv/dewolf-web
ls -ldZ /srv/dewolf-web
matchpathcon -V /srv/dewolf-web/index.html

Bestaat exact deze lokale mapping al, inspecteer haar dan eerst en gebruik alleen bij een bedoelde wijziging -m in plaats van -a. chcon wijzigt een huidig label, maar legt geen blijvende padregel vast; een relabel kan die wijziging weer overschrijven. Met semanage leg je de intentie vast, met restorecon pas je die toe.

httpd_sys_content_t is geen schrijfrecht voor Apache. Als uploads nodig zijn, gebruik dan een aparte, begrensde directory en onderzoek het daarvoor passende type. Maak niet de volledige documentroot schrijfbaar om één uploadprobleem te verhelpen. Houd gewone eigenaarschap- en mode-instellingen apart van SELinux.

4. Kies tussen boolean, poorttype en lokale policy

Een boolean schakelt een door de policy ontworpen mogelijkheid in. Het is geen toestemming voor één willekeurig audit-event. Onderzoek de beschrijving en de breedte van de toegang. Een bekend voorbeeld is httpd_can_network_connect; die keuze kan veel ruimer zijn dan toegang tot één backend. Controleer eerst of een specifiekere policy-optie past.

getsebool httpd_can_network_connect
sudo semanage boolean -l
sudo semanage port -l

Een bindfout op een afwijkende poort kan een poortlabelvraag zijn, geen bestandlabelvraag. Controleer of de poort al een ander type heeft voordat je een mapping toevoegt. Maak geen policykeuze uitsluitend op basis van een naam: verifieer het procesdomein en de bedoelde toegang.

Gebruik een lokale policy pas wanneer labels, configuratie, geschikte types en booleans geen passende oplossing bieden. Begrens dan bron, doel, klasse en permissies. audit2allow kan een voorstel maken uit auditgegevens, maar dat voorstel vereist review; historische of onverwachte toegang is geen betrouwbare functionele eis.

5. Valideer toegang én begrenzing

Reproduceer precies dezelfde handeling en controleer de nieuwe auditperiode. Test tevens een handeling die geweigerd moet blijven, bijvoorbeeld schrijven door httpd in een leesbare contentdirectory. Daarmee toets je of je de vereiste functie hebt hersteld zonder de grens onbedoeld te verruimen.

Voor het terugdraaien van een eigen padmapping: verwijder uitsluitend die mapping met semanage fcontext -d en voer restorecon uit op het afgebakende pad. Bedenk eerst welk label de standaardregel daarna oplevert. Bewaar voor booleans en lokale modules ook de oude toestand en de terugdraai-instructie.

Enterprise-aandachtspunten en valkuilen

Leg mappings, booleans en modules vast in configuratiebeheer en review ze bij upgrades. Neem geen brede permissive-instelling op als blijvende fix. Als tijdelijke diagnostiek nodig is, begrens het betreffende domein en de duur volgens het securitybeleid, en herstel daarna de normale enforcement.

Behandel auditgegevens als operationele informatie. Ze kunnen paden, accounts en procesargumenten bevatten. Publiceer voorbeelden met generieke namen en bewaar echte incidentgegevens op de daarvoor bedoelde plek.

Bronnen en versiecontrole

Technische referenties geraadpleegd op 30 september 2026. Controleer bij uitvoering de documentatie en manpages van de geïnstalleerde versie.

RHEL 9 — Using SELinux
Afwijkende serviceconfiguraties en labels

Gerelateerde artikelen

systemd troubleshooting: services, dependencies en restart-beleid
Podman in beheer: rootless containers, Quadlet en Docker-migratie
Enterprise Linux-beheer: tmp, journald, NFS en versionlock

Ondersteuning bij jouw platform

Wil je deze aanpak vertalen naar jouw omgeving? Bekijk Linux Consultancy of neem contact op met DEWOLF.IT.

Translate »