technische-infrastructuur:selinux

πŸ›‘οΈ 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.


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:

ModusGedragTulpencraft
EnforcingActies worden gecontroleerd en verboden acties worden geblokkeerdβœ…
PermissiveOvertredingen worden gelogd maar niet geblokkeerd⚠️ Alleen tijdelijk
DisabledSELinux 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:

  • of SELinux actief is;
  • welke modus wordt gebruikt;
  • welk policytype actief is;
  • welke policyversie wordt gebruikt.

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:

  • 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-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:

  • 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 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 met semanage.


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:

audit2allow is een laatste stap, niet de eerste oplossing.

Eerst controleren:

  1. Is de bestandscontext correct?
  2. Is de service correct geconfigureerd?
  3. Wordt een niet-standaard directory gebruikt?
  4. Is een SELinux boolean beschikbaar?
  5. Is de netwerk- of poortconfiguratie correct?
  6. 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.


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:

  • 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.


SELinux en firewalld vervangen elkaar niet.

BeveiligingslaagFunctie
πŸ”₯ firewalldBepaalt welke netwerkverbindingen worden toegestaan
πŸ›‘οΈ SELinuxBepaalt welke processen en objecten bepaalde acties mogen uitvoeren
πŸ” Linux permissionsRegelt traditionele gebruikers-, groep- en bestandsrechten
πŸ‘€ SSH-hardeningBeperkt beheerstoegang
🚫 Backend isolationVoorkomt 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:

  1. SELinux staat ingeschakeld.
  2. Enforcing is de standaardmodus.
  3. Permissive wordt alleen tijdelijk gebruikt voor troubleshooting.
  4. SELinux wordt niet permanent uitgeschakeld om applicatieproblemen op te lossen.
  5. File contexts worden gecontroleerd bij toegangsproblemen.
  6. Permanente aangepaste contexts worden met semanage vastgelegd.
  7. restorecon wordt gebruikt om verkeerde contexts te herstellen.
  8. AVC-denials worden onderzocht voordat policywijzigingen worden gemaakt.
  9. audit2allow wordt niet blind toegepast.
  10. SELinux vormt samen met firewalld en Linux permissions een gecombineerde beveiligingslaag.

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.

  • technische-infrastructuur/selinux.txt
  • Laatst gewijzigd: 2026/08/23 11:02
  • door rroethof