Home   Profil   Fun
#47 Linux  24.02.2009

SELinux-Befehle in der Übersicht


Diese Seite soll ein kleiner Notizzettel sein für die gängisten Befehle im Zusammenhang mit SELinux.
Viele der bestehenden Linux-Kommandos wurden für SELinux mit der Option -Z erweitert.
Hier einige Beispiele:
id -Z

Bei der Gelegenheit der Hinweis, dass 'su -' den security context nicht ändert!
$ id
uid=888(xyz) gid=888(xyz) groups=888(xyz) context=user_u:system_r:unconfined_t:s0
$ su -
Password:
# id
uid=0(root) gid=0(root) groups=0(root) context=user_u:system_r:unconfined_t:s0

ls -Z
ps -auxZ
find /etc -context "system_u:object_r:etc_t:s0"


Jetzt kommen wir zu den eigentlichen Userland-Kommandos von SELinux:

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

Überblick über den Status von SELinux abrufen.
# sestatus -v
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 23
Policy from config file:        targeted

Process contexts:
Current context:                unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Init context:                   system_u:system_r:init_t:s0
/sbin/mingetty                  system_u:system_r:getty_t:s0
/usr/sbin/sshd                  system_u:system_r:sshd_t:s0-s0:c0.c1023

File contexts:
Controlling term:               unconfined_u:object_r:unconfined_devpts_t:s0
/etc/passwd                     system_u:object_r:etc_t:s0
/etc/shadow                     system_u:object_r:shadow_t:s0
/bin/bash                       system_u:object_r:shell_exec_t:s0
/bin/login                      system_u:object_r:login_exec_t:s0
/bin/sh                         system_u:object_r:bin_t:s0 -> system_u:object_r:shell_exec_t:s0
/sbin/agetty                    system_u:object_r:getty_exec_t:s0
/sbin/init                      system_u:object_r:init_exec_t:s0
/sbin/mingetty                  system_u:object_r:getty_exec_t:s0
/usr/sbin/sshd                  system_u:object_r:sshd_exec_t:s0
/lib/libc.so.6                  system_u:object_r:lib_t:s0 -> system_u:object_r:lib_t:s0
/lib/ld-linux.so.2              system_u:object_r:lib_t:s0 -> system_u:object_r:ld_so_t:s0

Befindet sich SELinux im permissive oder enforcing mode?
# getenforce
Enforcing

Den enforcing mode aus- und wieder anschalten.
setenforce 0
setenforce 1

Alle Booleans anzeigen.
# getsebool -a
allow_console_login --> off
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
...

Oder nur einzelne Booleans anzeigen.
# getsebool allow_console_login
allow_console_login --> off

Den Wert einer einzelnen Boolean ändern.
# setsebool allow_console_login On

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

Dateien mit dem Standardkontext der Policy relablen. Mit -vn kann man sich erstmal anschauen, was geändert würde.
# 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

Einen Prozess in einem bestimmten Kontext starten (geht nur im permissive mode):
# 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
...

Initskripte und somit einen Dämon im richtigen security context starten:
# run_init /etc/init.d/apache2 start


Es folgen noch einige Befehle 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.
audit2allow

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


SELinux-Training