SELinux

Aus SchnallIchNet
(Weitergeleitet von Selinux)
Wechseln zu: Navigation, Suche

Userland-Tools

sestatus -v

zeigt den aktuellen selinux status an

# getenforce
Enforcing

Befindet sich SELinux im permissive oder enforcing mode?

setenforce 0
setenforce 1

Den enforcing mode aus- und wieder anschalten.

getsebool -a

zeigt alle bool-werte an

system-config-securitylevel

graphisches config-tool

newrole -r sysadm_t

Die SELinux-Rolle wechseln (gibt es nur in der strict policy).


contexte anzeigen/setzen

# ls -Z ./xyz.txt
-rw-r--r--  root root unconfined_u:object_r:admin_home_t:s0 xyz.txt

# chcon 'system_u:object_r:admin_home_t:s0' ./xyz.txt

# ls -Z ./xyz.txt
-rw-r--r--  root root system_u:object_r:admin_home_t:s0 ./xyz.txt

Den security context einzelner Dateien oder Dateisysteme ändern. Als Beispiel ändern wir hier den SELinux-Benutzer der Datei xyz.txt von unconfined_u nach system_u.

# ls -lZ /etc/zshrc
-rw-r--r--  root root unconfined_u:object_r:admin_home_t:s0 zshrc

# restorecon -vn /etc/zshrc
restorecon reset /etc/zshrc context unconfined_u:object_r:admin_home_t:s0->system_u:object_r:etc_t:s0
# restorecon /etc/zshrc

# ls -lZ /etc/zshrc
-rw-r--r--  root root system_u:object_r:etc_t:s0       /etc/zshrc

Dateien mit dem Standardkontext der Policy relablen. Mit -vn kann man sich erstmal anschauen, was geändert würde.

# setenforce 0
# vim&
[1] 5686 
# runcon 'system_u:object_r:admin_home_t:s0' vim&
[2] 5701 
# ps Z
...
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 5686 pts/1 T   0:00 vim
system_u:object_r:admin_home_t:s0 5701 pts/1   T      0:00 vim
...

Einen Prozess in einem bestimmten Kontext starten (geht nur im permissive mode)


semage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?"

file-context recursiv fuer ein verzeichnis setzen.
hier '/var/www' damit der httpd diesen lesen darf...


audit anzeige/policy erstellung

audit2why

get error/denied message from audit.log and pipe it

# echo "type=AVC msg=audit(1347538264.046:1782214): avc:  denied  { getattr } for  pid=12639 
comm="snmpwalk" path="/var/lib/net-snmp" dev=sdb5 ino=201334640 scontext=unconfined_u:system_r:nagios_t:s0 
tcontext=system_u:object_r:snmpd_var_lib_t:s0 tclass=dir
type=SYSCALL msg=audit(1347538264.046:1782214): arch=c000003e syscall=4 success=yes exit=0 
a0=1569860 a1=7fff30da71d0 a2=7fff30da71d0 a3=12 items=0 ppid=12628 pid=12639 auid=0 uid=498 
gid=498 euid=498 suid=498 fsuid=498 egid=498 sgid=498 fsgid=498 tty=(none) ses=30 
comm="snmpwalk" exe="/usr/bin/snmpwalk" subj=unconfined_u:system_r:nagios_t:s0 key=(null)" | audit2why

        Was caused by:
                Missing type enforcement (TE) allow rule.

                You can use audit2allow to generate a loadable module to allow this access.

audit2allow

audit2allow:

audit2allow -a -M audit2allow

audit2allow kann entweder vom STDIN eine/mehrere zeilen lesen, oder das gesamte logfile durchsehen.
-a im beispiel oben wird das gesamte logfile gelesen und in rules umgewandelt
-M legt den modulnamen fest und erzeugt 2 dateien:

  1. audit2allow.pp - hier sind die fuer SELinux kompilierten regeln drin und
  2. audit2allow.te - dies ist die menschlesbare form der rules die jederzeit mit 'make' kompiliert werden koennen

or from STDIN:

# echo "type=AVC msg=audit(1347538264.046:1782214): avc:  denied  { getattr } for  pid=12639 comm="snmpwalk" 
path="/var/lib/net-snmp" dev=sdb5 ino=201334640 scontext=unconfined_u:system_r:nagios_t:s0 
tcontext=system_u:object_r:snmpd_var_lib_t:s0 tclass=dir
type=SYSCALL msg=audit(1347538264.046:1782214): arch=c000003e syscall=4 success=yes exit=0 a0=1569860 
a1=7fff30da71d0 a2=7fff30da71d0 a3=12 items=0 ppid=12628 pid=12639 auid=0 uid=498 gid=498 euid=498 suid=498 
fsuid=498 egid=498 sgid=498 fsgid=498 tty=(none) ses=30 comm="snmpwalk" exe="/usr/bin/snmpwalk" 
subj=unconfined_u:system_r:nagios_t:s0 key=(null)" | audit2allow


#============= nagios_t ==============
allow nagios_t snmpd_var_lib_t:dir getattr;

as we can see, the rule is printed to stdout...
not what i exactly wanted... push it to selinux directly!
consult man-page of audit2allow you will find how, or se next command... ;-)

# echo "type=AVC msg=audit(1347538264.046:1782214): avc:  denied  { getattr } for  pid=12639 comm="snmpwalk" 
path="/var/lib/net-snmp" dev=sdb5 ino=201334640 scontext=unconfined_u:system_r:nagios_t:s0 
tcontext=system_u:object_r:snmpd_var_lib_t:s0 tclass=dir
type=SYSCALL msg=audit(1347538264.046:1782214): arch=c000003e syscall=4 success=yes exit=0 a0=1569860 
a1=7fff30da71d0 a2=7fff30da71d0 a3=12 items=0 ppid=12628 pid=12639 auid=0 uid=498 gid=498 euid=498 
suid=498 fsuid=498 egid=498 sgid=498 fsgid=498 tty=(none) ses=30 comm="snmpwalk" exe="/usr/bin/snmpwalk" 
subj=unconfined_u:system_r:nagios_t:s0 key=(null)" | audit2allow -M local
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i local.pp

you can see it creates the right rule in right place and tells us the command to activate ... nice!
so do it!

# semodule -i local.pp

have fun!


# run_init /etc/init.d/apache2 start

Initskripte und somit einen Dämon im richtigen security context starten:


Es folgen noch einige tools z.t. auch ohne Beispiele.
Hilfsmittel, um aus Regelverletzungen, die in den SELinux logs erscheinen, entsprechende Änderungen an der Policy durchzuführen. Es bewahrt einen davor, selbst manuell ins Regelwerk einzugreifen zu müssen.


Hilfsmittel, um den Grund von denied-Meldungen zu verstehen.
audit2why

Dateisysteme mit security context labeln bzw. korrigieren.
setfiles
fixfiles

Das folgende Kommando zeigt Zahlen des access vector caches an (Statistik).
avcstat

Booleans (persistent) setzen

setsebool -P nagios_disable_trans=1

deaktiviert SELinux fuer den nagios-daemon
oder

setsebool -P named_disable_trans=1

deaktiviert SELinux fuer den nameserver-daemon (bind)


Firefox

ich habe firefox im home-verzeichnis installiert, benutze also nicht den distro-firefox...
manchmal hat man dann allerdings probleme mit selinux nach firefox-update.
firfox will nicht mehr starten... ;-)

chcon -t texrel_shlib_t /home/ME/firefox/libxul.so

behebt das wieder!
selbiges gilt neuerdings f. den flash-player

chcon -t textrel_shlib_t '/usr/lib/flash-plugin/libflashplayer.so'

Siehe auch

http://wiki.centos.org/HowTos/SELinux
http://www.os-t.de/HTML-SELinux/node97.html