[olug] SELINUX, you irritate me
Lou Duchez
lou at paprikash.com
Tue Jul 16 14:44:12 CDT 2019
So when SELinux came out ages ago, I quickly developed a strong distaste
for it. It felt like it was more likely to do harm than good, like a
security guard in your building who insists on quarantining your
groceries to make sure you're not a drug smuggler. I found I had to
shut SELinux off to get things to work.
Years later, I am finally conceding that SELINUX is here to stay, and
it's time to learn to love it (or at least tolerate it). Here's how I
finally got on SELinux's side:
1) Throw SELinux into "permissive" mode by editing
/etc/sysconfig/selinux and rebooting. (If SELinux had been "disabled",
upon reboot, SELinux is going to have to relabel all the files on your
system. This is actually pretty quick, unless you've got directories
and directories and directories of files. I had to do this on a couple
servers that had years of daily snapshots on them, and after a couple
days the relabeling wasn't done. I eventually deleted most of the old
backups -- kept one backup per month, and only since Jan 2018 -- and the
relabel took under 10 minutes. Math-wise, I suspect the relabeling does
not scale linearly with the number of files, but perhaps with the square
of the number of files.)
2) After the reboot, you can run "audit2why -b" and "audit2allow -b"
to get information on opertaions that SELinux has noted have violated
policy since booting. (There are options other than "-b", but I'm just
talking about how to make SELinux reasonable. And to me, it's pretty
reasonable to look at how it's been doing since the last boot.)
3) You can run "audit2allow -b -M newrules" to create a file,
"newrules.pp", that contains SELinux rules necessary to allow all the
operations that were violating policy. You can load it by running
"semodule -i newrules.pp". You can also look at "newrules.te" to see a
more visually understandable list of new rules. Now I won't claim to
fully understand what the rules are, but I can generally see processes I
recognize and take it on faith that they're trying to do something
reasonable. Like recently I found this entry in newrules.te:
allow dhcpd_t unlabeled_t:file { append getattr link map open read
unlink write };
I could do some digging to try to figure out exactly what file it's
trying to get at. However, I also know that I've got some custom code
that creates and overwrites files in /var/lib/dhcpd, so it seems likely
that SELinux finds my custom code questionable. Okay SELinux, you win,
I'll let you have that rule.
4) After applying new rules, reboot. Maybe do another "audit2allow
-b" to see if anything is still coming up.
5) Every few days, see if SELinux is still coming up with messages
and warnings. Hopefully you'll reach a point where SELinux goes for
days without having any complaints.
6) Once you're satisfied that SELinux seems to be pretty happy with
things, THEN is when you switch SELinux to "enforcing", over in
/etc/sysconfig/selinux.
All that work to get SELinux properly tuned for your system. But I ...
guess it makes things better? People either love SELinux or hate it
with a passion, there seems to be no middle ground, and I think I see why.
More information about the OLUG
mailing list