== SELinux auf SL5 == <> === Informationen über das laufende System erhalten === {{{ # SELinux modus getenforce # man pages man selinux man _selinux # = ftpd, httpd, kerberos, named, nfs, nis, pam, rsync, samba, ypbind # file contexts ls -lZ # patterns of file names with known contexts (do not edit!!!) /etc/selinux/targeted/contexts/files/file_contexts # process contexts ps -auxwwZ # a list of defined and installed policy files ls /usr/share/selinux/targeted }}} === Filekontext ändern === Am sinnvollsten ist es, einen von einer Policy vorgegebenen Ort der Datei/Directory zu wählen und den Kontext entsprechend der Policy mit ''restorecon'' zu setzen: {{{ # prüfen, ob Kontext ok ls -lZ # Kontext auf Standardwert setzen restorecon # Kontext ändern (meistens Typ, aber auch Rolle (-r) oder user (-u)) chcon -t # Kontext permanent hinzufügen semanage fcontext -a -t textrel_shlib_t /opt/products/.../Oracle.so }}} Oft verursachen nachzuladende shared Libraries avc denied Fehler, so z.B. bei der Installation von acroread in einen unüblichen Pfad. Diesen Libs kann man permanent den korrekten Kontext geben, indem man Regeln hinzufügt: {{{ semanage fcontext -a -t textrel_shlib_t '/lib/*.so' }}} Dabei sind Shell Regex erlaubt, um die Zahl der Regeln zu minimieren, Beispiele sind im File file_contexts zu finden, die Regeln werden nach file_contexts.local geschrieben === Boolsche Flags setzen === Um sich einen Überblick über vorhandene Flags zu verschaffen, z.B. beim httpd: {{{ /usr/sbin/getsebool -a | grep httpd }}} Was die Flags tun, kann man erraten, oder falls es wie beim httpd eine Manpage gibt, auch nachlesen {{{ man http_selinux }}} Das Setzen des Flags ''httpd_can_network_connect'' ist z.B. wichtig, falls ein CGI Skript mit einem Mysql Server kommunizieren will: {{{ setsebool httpd_can_network_connect on }}} === Neue Policy erzeugen === zur Ergänzung bestehender Policies können die avc denied Meldungen benutzt werden, um eine neue Policy zu erzeugen. Beispiel: nur die letzten 500 Zeilen aus dem Logfile mit avc denied Meldungen berücksichtigen: {{{ tail -n 500 /var/log/messages|audit2allow -M mymodule semodule -i mymodule.pp }}} '''Achtung''': keine Modulnamen benutzen, die schon existieren (s.o.) Diese Prozedur muss evtl. so lange wiederholt werden, bis keine Fehlermeldungen mehr kommen. Es gibt aber auch avc denied Meldungen, die keine Funktionseinschränkungen bewirken. Beispiel: Mar 15 18:47:36 bonnie-vm2 kernel: audit(1237139256.559:6364): avc: denied { getattr } for pid=21887 comm="postdrop" path="pipe:[21412767]" dev=pipefs ino=21412767 scontext=root:system_r:postfix_postdrop_t:s0 tcontext=root:syste m_r:httpd_t:s0 tclass=fifo_file Diese Meldungen kann man mit dontaudit Regeln im Policy File unterdrücken. Wenn man Änderungen an dem erzeugten Policy File vornehmen will/muss, geht man so vor: {{{ vi mymodule.te # wurde von audit2allow erzeugt, dieses File ändern checkmodule -M -m -o mymodule.mod mymodule.te semodule_package -o mymodule.pp -m mymodule.mod semodule -i mymodule.pp }}} === Tools und Infos von Erkennung von SE Linux Problemen === * audit /etc/init.d/audit start * setroubleshoot installieren * /usr/share/doc/selinux-policy-2.4.6/html/ * http://fedoraproject.org/wiki/SELinux/Troubleshooting