Was ist SELinux?
Zur Navigation springen
Zur Suche springen
DAC vs. MAC
- SELinux soll verhindern, dass die Lese- und Schreibrechte von Dateien zu öffentlich gemacht werden, was unter normalen Umständen möglich wäre.
- z.B. Könnten unberechtigte Benutzer die Rechte ihrer Zugangsdaten wie SSH-Keys öffentlich lesbar machen, ohne die Zustimmung eines Admins.
- SELinux würde nicht nur die Benutzer- und Gruppenzugehörigkeit überprüfen, sondern zusätzlich auch den Dateikontext
- Achtung: eine falsch konfigurierte SELinux-Installation könnte zu einem unbootbaren System führen.
Regeln
- Unter SELinux müssen Zugriffe explizit erlaubt werden
- Dabei werden die Kontexte von Objekten verglichen mit dem was in den SELinux-Policies steht
- sesearch -s mysqld_t -t mysqld_db_t --allow -ds -dt
allow mysqld_t mysqld_db_t:dir { add_name create getattr ioctl link lock open read remove_name rename reparent rmdir search setattr unlink write };
allow mysqld_t mysqld_db_t:file { append create getattr ioctl link lock map open read rename setattr unlink write };
allow mysqld_t mysqld_db_t:lnk_file { create getattr ioctl link lock read rename setattr unlink write };
- -s sucht nach Regeln mit dem angegebenen Quellkontext
- -ds beschränkt die Ergebnisse auf Regeln, die nur den jeweiligen Quellkontext haben
- sesearch -s httpd_t -t httpd_sys_content_t --allow -ds -dt
allow httpd_t httpd_sys_content_t:dir { add_name getattr ioctl lock open read remove_name search write }; [ ( httpd_builtin_scripting && httpd_unified && httpd_enable_cgi ) ]:True
allow httpd_t httpd_sys_content_t:file map; [ ( httpd_builtin_scripting && httpd_unified && httpd_enable_cgi ) ]:True
- Keine allow-Regeln für
- sesearch -s mysqld_t -t httpd_sys_content_t --allow -ds -dt
- sesearch -s httpd_t -t mysqld_db_t --allow -ds -dt
allow httpd_t mysqld_db_t:dir { getattr open search };
Programmaufrufablauf
- Ein SELinux-Benutzer versucht ein Programm aufzurufen
- Es nach einer Domänentransitionsregel geschaut
- sesearch -s user_t -ds -t ssh_exec_t -dt -T
type_transition user_t ssh_exec_t:process ssh_t;
- Man liest der Typ user_t darf beim Aufruf von ssh_exec_t zu ssh_t transitieren.
- Zusätzlich muss das wechseln in einen anderen Typ erlaubt sein
- sesearch -s user_t -ds -t ssh_t -p transition --allow
allow user_t ssh_t:process { getattr sigchld sigkill signal signull sigstop transition };
- Das Programm läuft dann unter den vordefinierten Prozesstyp
- ps -eZ | grep ssh_t
user_u:user_r:ssh_t:s0 8179 pts/1 00:00:00 ssh
Links
Erklärung der Berechtigungen: http://selinuxproject.org/page/ObjectClassesPerms

