Was ist SELinux?

Aus Xinux Wiki
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