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.
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.
De huidige SELinux-status kan worden gecontroleerd met:
getenforce
Verwachte output:
Enforcing
Voor uitgebreidere informatie:
sestatus
Hiermee kan onder andere worden gecontroleerd:
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.
In Enforcing-modus worden SELinux-regels daadwerkelijk afgedwongen.
Wanneer een proces bijvoorbeeld probeert:
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-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 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.
De belangrijkste applicaties binnen Tulpencraft zijn Java-gebaseerd.
Onder andere:
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 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.
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.
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.
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.
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
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 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:
Pas daarna wordt een eigen policy overwogen.
Red Hat waarschuwt eveneens om niet direct audit2allow te gebruiken zonder eerst labeling en configuratie te controleren.
getenforce sestatus
ls -Z
sudo restorecon -Rv /pad
sudo semanage fcontext -l
getsebool -a
sudo ausearch -m AVC -ts recent
sudo ausearch -m AVC -ts recent | audit2why
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:
Voor services die op niet-standaard poorten luisteren kan semanage port nodig zijn.
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.
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
Wanneer een Minecraft- of systeemservice plotseling niet meer werkt:
sudo systemctl status <service>
getenforce
sudo ausearch -m AVC -ts recent
sudo ausearch -m AVC -ts recent | audit2why
ls -Z /pad/naar/bestand
sudo restorecon -Rv /pad
Pas wanneer bovenstaande controles geen oplossing bieden, wordt onderzocht of een specifieke SELinux-aanpassing noodzakelijk is.
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.
Binnen Tulpencraft gelden voor SELinux de volgende uitgangspunten:
semanage vastgelegd.restorecon wordt gebruikt om verkeerde contexts te herstellen.audit2allow wordt niet blind toegepast.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.