π‘οΈ SELinux
SELinux (Security-Enhanced Linux) vormt een aanvullende beveiligingslaag binnen de Tulpencraft-infrastructuur.
Op de Tulpencraft-servers wordt SELinux gebruikt als Mandatory Access Control (MAC)-mechanisme bovenop de normale Linux-bestandsrechten, gebruikersrechten en firewall.
Het uitgangspunt is:
SELinux blijft ingeschakeld en draait in Enforcing-modus.
Hierdoor kan een proces niet automatisch alles uitvoeren waartoe de onderliggende Linux-gebruiker toegang heeft. SELinux bepaalt aanvullend welke acties een proces volgens het beveiligingsbeleid mag uitvoeren.
π SELinux-modus
Rocky Linux 10 wordt standaard met SELinux ingeschakeld en in de aanbevolen Enforcing-modus gebruikt. In deze modus worden overtredingen van het SELinux-beleid daadwerkelijk geblokkeerd.
De drie mogelijke modi zijn:
| Modus | Gedrag | Tulpencraft |
|---|---|---|
| Enforcing | Acties worden gecontroleerd en verboden acties worden geblokkeerd | β |
| Permissive | Overtredingen worden gelogd maar niet geblokkeerd | β οΈ Alleen tijdelijk |
| Disabled | SELinux is volledig uitgeschakeld | β |
Voor productieomgevingen is Enforcing de gewenste configuratie.
π Status controleren
De huidige SELinux-status kan worden gecontroleerd met:
getenforce
Verwachte output:
Enforcing
Voor uitgebreidere informatie:
sestatus
Hiermee kan onder andere worden gecontroleerd:
- of SELinux actief is;
- welke modus wordt gebruikt;
- welk policytype actief is;
- welke policyversie wordt gebruikt.
βοΈ Configuratie
De permanente SELinux-configuratie staat in:
/etc/selinux/config
De relevante instellingen zijn:
SELINUX=enforcing SELINUXTYPE=targeted
Voor Tulpencraft is targeted het uitgangspunt.
De targeted policy richt SELinux-beperkingen voornamelijk op specifieke systeemdiensten en processen, terwijl normale gebruikersprocessen niet op dezelfde manier worden beperkt.
π§± Enforcing
In Enforcing-modus worden SELinux-regels daadwerkelijk afgedwongen.
Wanneer een proces bijvoorbeeld probeert:
- een bestand te lezen waarvoor het geen SELinux-toegang heeft;
- een bestand te wijzigen;
- een niet-toegestane netwerkactie uit te voeren;
- een service op een niet-geconfigureerde manier te gebruiken;
kan SELinux de actie blokkeren.
Dit gebeurt onafhankelijk van de normale Unix-bestandsrechten.
Linux permissies
β
βΌ
mag proces
deze actie?
β
βΌ
SELinux
β
βΌ
mag deze
context dit?
β
βββββ΄ββββ
β β
JA NEE
β β
βΌ βΌ
toestaan blokkeren
π§ͺ Permissive voor troubleshooting
Permissive-modus kan tijdelijk worden gebruikt wanneer een applicatie door SELinux wordt geblokkeerd en eerst moet worden onderzocht wat er gebeurt.
Tijdelijk naar permissive:
sudo setenforce 0
Controleren:
getenforce
Terug naar Enforcing:
sudo setenforce 1
Een wijziging met setenforce is tijdelijk en blijft niet automatisch behouden na een reboot.
Permissive is geen permanente oplossing.
Als een applicatie alleen in permissive werkt, moet worden onderzocht waarom SELinux de actie blokkeert en moet de onderliggende configuratie worden gecorrigeerd.
π« SELinux niet uitschakelen
SELinux wordt binnen Tulpencraft niet uitgeschakeld om applicatieproblemen op te lossen.
Dus niet:
SELINUX=disabled
en ook niet permanent booten met SELinux uitgeschakeld.
Het uitschakelen van SELinux verwijdert een belangrijke beveiligingslaag en maakt het bovendien moeilijker om SELinux later correct opnieuw in te schakelen.
π§βπ» Minecraft en Java
De belangrijkste applicaties binnen Tulpencraft zijn Java-gebaseerd.
Onder andere:
- Velocity;
- Paper;
- Minecraft;
- Citizens;
- LobbyPlugin;
- andere Java-gebaseerde plugins en services.
SELinux hoeft hiervoor normaal gesproken niet uitgeschakeld te worden.
De Minecraft-processen moeten toegang krijgen tot hun eigen configuratie-, wereld-, plugin- en logbestanden volgens de normale Linux- en SELinux-beveiligingsregels.
π SELinux-bestandscontexten
SELinux gebruikt zogenaamde security contexts om bestanden en processen te identificeren.
Een context kan worden bekeken met:
ls -Z
Bijvoorbeeld:
-rw-r--r--. root root system_u:object_r:var_t:s0 bestand
De context bevat onder andere:
user:role:type:level
Voor de meeste praktische SELinux-problemen is vooral het type belangrijk.
π Context herstellen
Wanneer een bestand of directory de verkeerde SELinux-context heeft gekregen, kan deze worden hersteld met:
sudo restorecon -Rv /pad/naar/bestand
Voor een volledige directory:
sudo restorecon -Rv /srv/minecraft
restorecon past de context aan naar de standaard SELinux-context die voor dat pad is gedefinieerd.
Dit is vaak de juiste eerste oplossing wanneer een SELinux-probleem wordt veroorzaakt door een verkeerde labeling.
π·οΈ Aangepaste directories
Tulpencraft gebruikt onder andere niet-standaard locaties voor Minecraft-data, bijvoorbeeld:
/srv/minecraft/
Wanneer een service toegang nodig heeft tot een niet-standaard directory, moet eerst worden gecontroleerd of de SELinux-context correct is.
Een verkeerde context is een veelvoorkomende oorzaak van SELinux-denials.
De juiste aanpak is:
Probleem β βΌ Context controleren β βΌ Verkeerde context? β βββ Ja βββΊ semanage fcontext β β β βΌ β restorecon β βββ Nee βββΊ beleid verder onderzoeken
Red Hat adviseert bij dit soort problemen eerst labeling en configuratie te controleren voordat een eigen SELinux-policy wordt gemaakt.
π§© semanage
Voor permanente aangepaste file contexts wordt semanage gebruikt.
Bijvoorbeeld:
sudo semanage fcontext -a -t <SELINUX_TYPE> "/srv/minecraft(/.*)?"
Daarna:
sudo restorecon -Rv /srv/minecraft
Hierdoor wordt de aangepaste context onderdeel van de SELinux-configuratie en kan deze na een relabeling opnieuw worden toegepast.
Gebruik geen tijdelijke
chcon-oplossing als de wijziging permanent moet zijn. Leg permanente contexts vast metsemanage.
π SELinux-denials onderzoeken
Wanneer SELinux een actie blokkeert, wordt dit doorgaans geregistreerd als een AVC (Access Vector Cache) denial.
De recente denials kunnen worden bekeken met:
sudo ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today
Dit is ook de door Red Hat beschreven methode om SELinux-denials te onderzoeken.
Een compactere controle:
sudo ausearch -m AVC -ts recent
π§ audit2why
Voor het analyseren van een denial kan audit2why worden gebruikt:
sudo ausearch -m AVC -ts recent | audit2why
Hiermee kan worden onderzocht waarom SELinux een bepaalde actie heeft geweigerd.
Dit is vooral nuttig wanneer uit de AVC-melding niet direct duidelijk is welke policy of context het probleem veroorzaakt.
β οΈ audit2allow niet blind gebruiken
audit2allow kan SELinux-policyregels genereren waarmee een denial wordt toegestaan.
Dat betekent echter niet automatisch dat de gegenereerde regel veilig of correct is.
Daarom geldt binnen Tulpencraft:
audit2allowis een laatste stap, niet de eerste oplossing.
Eerst controleren:
- Is de bestandscontext correct?
- Is de service correct geconfigureerd?
- Wordt een niet-standaard directory gebruikt?
- Is een SELinux boolean beschikbaar?
- Is de netwerk- of poortconfiguratie correct?
- Is er daadwerkelijk sprake van een ontbrekende policyregel?
Pas daarna wordt een eigen policy overwogen.
Red Hat waarschuwt eveneens om niet direct audit2allow te gebruiken zonder eerst labeling en configuratie te controleren.
π§° Nuttige commando's
Status
getenforce sestatus
Context bekijken
ls -Z
Context herstellen
sudo restorecon -Rv /pad
File-contextregels bekijken
sudo semanage fcontext -l
SELinux-booleans bekijken
getsebool -a
Denials bekijken
sudo ausearch -m AVC -ts recent
Denials analyseren
sudo ausearch -m AVC -ts recent | audit2why
π SELinux en netwerkpoorten
SELinux kan naast firewalld ook invloed hebben op netwerkservices.
Een firewallpoort kan dus geopend zijn terwijl SELinux een service alsnog verhindert om die poort op de gewenste manier te gebruiken.
Dit zijn twee verschillende beveiligingslagen:
Internet
β
βΌ
π₯ firewalld
β
βΌ
Netwerkverbinding
β
βΌ
π‘οΈ SELinux
β
βΌ
Applicatie
Daarom moet bij netwerkproblemen worden gecontroleerd:
- luistert de applicatie?
- staat de poort open in firewalld?
- staat SELinux de activiteit toe?
- klopt de SELinux-poortcontext?
Voor services die op niet-standaard poorten luisteren kan semanage port nodig zijn.
π₯ Relatie met firewall
SELinux en firewalld vervangen elkaar niet.
| Beveiligingslaag | Functie |
|---|---|
| π₯ firewalld | Bepaalt welke netwerkverbindingen worden toegestaan |
| π‘οΈ SELinux | Bepaalt welke processen en objecten bepaalde acties mogen uitvoeren |
| π Linux permissions | Regelt traditionele gebruikers-, groep- en bestandsrechten |
| π€ SSH-hardening | Beperkt beheerstoegang |
| π« Backend isolation | Voorkomt directe toegang tot Minecraft-backends |
Samen vormen deze lagen de host-level beveiliging van Tulpencraft.
π Updates en SELinux
SELinux-policy wordt samen met de normale Rocky Linux-updates onderhouden.
Updates controleren:
sudo dnf check-update
Systeemupdates:
sudo dnf update
Na updates moet worden gecontroleerd of kritieke Tulpencraft-services nog correct functioneren.
Bij onverwacht gedrag:
getenforce sudo ausearch -m AVC -ts recent
π¨ Bij problemen
Wanneer een Minecraft- of systeemservice plotseling niet meer werkt:
1. Controleer de service
sudo systemctl status <service>
2. Controleer SELinux
getenforce
3. Controleer recente AVC's
sudo ausearch -m AVC -ts recent
4. Analyseer de melding
sudo ausearch -m AVC -ts recent | audit2why
5. Controleer file contexts
ls -Z /pad/naar/bestand
6. Herstel indien nodig
sudo restorecon -Rv /pad
Pas wanneer bovenstaande controles geen oplossing bieden, wordt onderzocht of een specifieke SELinux-aanpassing noodzakelijk is.
π Toekomstige infrastructuur
Wanneer Tulpencraft verder wordt opgesplitst over meerdere VM's en Proxmox-nodes blijft SELinux onderdeel van de standaard hardening.
Iedere Rocky Linux VM krijgt daarbij in principe:
Rocky Linux 10
β
βββ π₯ firewalld
β
βββ π‘οΈ SELinux Enforcing
β
βββ π SSH-hardening
β
βββ π automatische/periodieke updates
β
βββ π logging & monitoring
Hierdoor blijft de beveiligingsbasis zoveel mogelijk gelijk tussen de verschillende Tulpencraft-servers.
β Beveiligingsprincipes
Binnen Tulpencraft gelden voor SELinux de volgende uitgangspunten:
- SELinux staat ingeschakeld.
- Enforcing is de standaardmodus.
- Permissive wordt alleen tijdelijk gebruikt voor troubleshooting.
- SELinux wordt niet permanent uitgeschakeld om applicatieproblemen op te lossen.
- File contexts worden gecontroleerd bij toegangsproblemen.
- Permanente aangepaste contexts worden met
semanagevastgelegd. restoreconwordt gebruikt om verkeerde contexts te herstellen.- AVC-denials worden onderzocht voordat policywijzigingen worden gemaakt.
audit2allowwordt niet blind toegepast.- SELinux vormt samen met firewalld en Linux permissions een gecombineerde beveiligingslaag.
π Gerelateerde documentatie
π Externe documentatie
Voor de technische werking en troubleshooting van SELinux wordt de officiΓ«le documentatie van Red Hat Enterprise Linux 10 als primaire referentie gebruikt. De SELinux-documentatie van RHEL 10 is inhoudelijk relevant voor Rocky Linux 10 vanwege de gedeelde Enterprise Linux-basis.