Modulenaam: mac_portacl.ko
Kernelinstelling: MAC_PORTACL
Opstartoptie: mac_portacl_load="YES"
De module mac_portacl(4) wordt gebruikt om het binden aan lokale TCP- en UDP-poorten te begrenzen door een waaier aan sysctl-variabelen te gebruiken. In essentie maakt mac_portacl(4) het mogelijk om niet-root-gebruikers in staat te stellen om aan gespecificeerde geprivilegieerde poorten te binden, dus poorten lager dan 1024.
Eenmaal geladen zal deze module het MAC-beleid op alle sockets aanzetten. De volgende tunables zijn beschikbaar:
security.mac.portacl.enabled schakelt het beleid volledig in of uit.
security.mac.portacl.port_high stelt het hoogste poortnummer in waarvoor mac_portacl(4) bescherming biedt.
security.mac.portacl.suser_exempt sluit de gebruiker root uit van dit beleid wanneer het op een waarde anders dan nul wordt ingesteld.
security.mac.portacl.rules specificeert het eigenlijke beleid van mac_portacl; zie onder.
Het eigenlijke beleid van mac_portacl, zoals gespecificeerd
in de sysctl security.mac.portacl.rules, is een tekststring van
de vorm: regel[,regel,...] met zoveel regels als nodig. Elke
regel heeft de vorm: idtype:id:protocol:poort. De parameter
idtype
kan uid of gid zijn en wordt gebruikt om de parameter id
als respectievelijk een gebruikers-id of groeps-id te
interpreteren. De parameter protocol
wordt gebruikt om te
bepalen of de regel op TCP of UDP moet worden toegepast door de parameter op tcp of udp in te stellen. De laatste
parameter poort
is het poortnummer waaraan de
gespecificeerde gebruiker of groep zich mag binden.
Opmerking: Aangezien de regelverzameling direct door de kernel wordt geïnterpreteerd kunnen alleen numerieke waarden voor de parameters voor de gebruikers-ID, groeps-ID, en de poort gebruikt worden. Voor gebruikers, groepen, en poortdiensten kunnen dus geen namen gebruikt worden.
Standaard kunnen op UNIX®-achtige systemen poorten lager dan 1024 alleen aan geprivilegieerde processen gebonden worden, dus diegenen die als root draaien. Om mac_portacl(4) toe te laten staan om ongeprivilegieerde processen aan poorten lager dan 1024 te laten binden moet deze standaard UNIX-beperking uitgezet worden. Dit kan bereikt worden door de sysctl(8)-variabelen net.inet.ip.portange.reservedlow en net.inet.ip.portrange.reservedhigh op nul te zetten.
Zie de onderstaande voorbeelden of bekijk de handleidingpagina voor mac_portacl(4) voor meer informatie.
De volgende voorbeelden zouden de bovenstaande discussie wat moeten toelichten:
# sysctl security.mac.portacl.port_high=1023 # sysctl net.inet.ip.portrange.reservedlow=0 net.inet.ip.portrange.reservedhigh=0
Eerst wordt mac_portacl(4) ingesteld om de standaard geprivilegieerde poorten te dekken en worden de normale bindbeperkingen van UNIX uitgeschakeld.
# sysctl security.mac.portacl.suser_exempt=1
De gebruiker root zou niet beperkt moeten worden door dit beleid, stel security.mac.portacl.suser_exempt dus in op een waarde anders dan nul. De module mac_portacl(4) is nu ingesteld om zich op de zelfde manier te gedragen als UNIX-achtige systemen zich standaard gedragen.
# sysctl security.mac.portacl.rules=uid:80:tcp:80
Sta de gebruiker met UID 80 (normaliter de gebruiker www) toe om zich aan poort 80 te binden. Dit kan gebruikt worden om de gebruiker www toe te staan een webserver te draaien zonder ooit root-rechten te hebben.
# sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995
Sta de gebruiker met UID 1001 om zich aan de TCP-poorten 110 (“pop3”) en 995 (“pop3s”) te binden. Dit staat deze gebruiker toe om een server te starten die verbindingen accepteert op poorten 110 en 995.