SELinux en poorten

Om een proces (bv. httpd) toegang te geven tot een bepaalde poort moet je in SELinux de context van de poort veranderen.

Dat is niet zo moeilijk:

semanage port -a -t http_port_t -p tcp 8443

Maar, soms is de poort al toegewezen aan een context en krijg je een toffe foutmelding:

Port tcp/8443 already defined

Maar, je kan gelukkig ook, in plaats van een combinatie toe te voegen (-a), ook de bestaande combinatie wijzigen (-m):

semanage port -m -t http_port_t -p tcp 8443

(Het staat ook in de man-page.)

En zo is SELinux gelukkig, en is iedereen gelukkig!

SELinux Policy op Fedora 25

Bij het gebruik van SELinux is het al eens nodig om een bepaalde aanpassing te doen omdat iets niet werkt. Je kan SELinux simpelweg afleggen natuurlijk, maar dat is niet zo verstandig.

Beter is het om een policy te maken voor de applicatie. Stel dat Samba bijvoorbeeld toegang moet hebben tot een bestandssysteem dat via FUSE gemount wordt. Normaal heeft smbd_t geen toegang tot fusefs_t, maar dat kan met een module snel verholpen worden. Het bestand moet dezelfde naam hebben als de parameter van policy_module (i.e. samba_fuse_access.te in dit geval). Op de Gentoo Wiki staat meer uitleg over de syntax.

policy_module(samba_fuse_access, 1.0)

gen_require(`
        type smbd_t;
        type fusefs_t;
')

allow smbd_t fusefs_t:file { getattr read write unlink open lock };

(Ik geef hier smbd_t het recht om de attr van bestanden met als type fusefs_t te bekijken, om ze te openen, te locken, te verwijderen en ze te lezen en te schrijven. Welke rechten het proces nodig heeft hangt van de applicatie af. Kijk in /var/audit/audit.log om te weten welke nodig zijn en voor welke types. Zoek naar avc: denied { write } of soortgelijk.)

Compileer (met make) de module tot een .pp-bestand (het is dat bestand dat je zal inladen met SELinux).

make -f /usr/share/selinux/devel/Makefile samba_fuse_access.pp

Inladen van de module doe je met semodule.

semodule -i samba_fuse_access.pp

Het is misschien een beetje moeilijker dan gewoon SELinux afleggen, maar het is wel een stuk veiliger.