Differences between revisions 14 and 15
Revision 14 as of 2017-11-13 16:47:11
Size: 5248
Comment:
Revision 15 as of 2017-11-13 18:13:07
Size: 5666
Comment:
Deletions are marked like this. Additions are marked like this.
Line 116: Line 116:
 * Maschine besser mit lvm konfigurieren, flexibler
 * separates Verzeichnis für /var/www/cgi-bin
   * dieses nicht mit nosuid mounten
   * dann wird kein separater SELinux Modul benötigt, der bestehende Probleme ausräumt, wie
 * Maschinen sollten grundsätzlich besser mit lvm konfiguriert werden, mit etwas Platzreserver - das ist flexibler und erlaubt z.B. Probleme wie dieses leicht und schnell zu beheben
 * die meisten Dateisysteme werden bei uns aus gutem Grund mit den Optionen nosuid,nodev gemountet
  * allerdings ist nosuid problematisch für /var/www/cgi-bin
   * es verhindert die "Transition" von httpd_t nach httpd_sys_script_exec_t beim Start der Scripts
   * deshalb sollte ein separates Dateisystem für /var/www/cgi-bin angelegt werden
    * und nur dieses nicht mit nosuid gemountet werden
   * dann wird kein separater SELinux Modul benötigt, wie
Line 130: Line 133:
   * dieser Modul eröffnet größere Spielräume, da er nicht im SELinux Context läuft    * dieses Modul eröffnet größere Spielräume als ein suid gemountetes /var/www/cgi-bin

SELinux

Externe Dokumentation

SELinux User Guide als PDF und HTML

CentOS SELinux Howto

SELinux Wiki

Alle AVC denied messages anzeigen

The installed default selinux policy may have some don't audit rules. That is generally the case with SL6 and newer. To see ALL AVC denied messages the don't audit rules may be switched off temporarily by

semodule -D -B

To revert the effect the command has to be issued without the -D flag

Informationen über das laufende System erhalten

# SELinux modus
getenforce

# man pages
man selinux
man <daemon>_selinux # <daemon> = ftpd, httpd, kerberos, named, nfs, nis, pam, rsync, samba, ypbind

# file contexts
ls -lZ <filename>

# 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 <filename>
# Kontext auf Standardwert setzen
restorecon <filename>
# Kontext ändern (meistens Typ, aber auch Rolle (-r) oder user (-u))
chcon -t <neuer typ> <filename>
# 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 '<Pfad zu acroread>/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 <!> Die Regeln werden erst wirksam, wenn selinux aus- und wieder eingeschaltet wird. <!>

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 httpd_selinux

Das Setzen des Flags httpd_can_network_connect ist z.B. wichtig, falls ein CGI Skript mit einem Mysql Server kommunizieren will. Um das über reboots hinweg permanent zu machen, gibt man die Option -P an. Soll der Webserver auch auf AFS zugreifen dürfen, setzt man die Option httpd_use_nfs.

setsebool -P httpd_can_network_connect on
setsebool -P httpd_use_nfs 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

SELinux Modus ändern

In welchem Modus SELinux läuft, ist in /etc/selinux/config gespeichert. Dort kann man permanente Änderungen vornehmen, die auch nach reboot noch gültig sind. Mit setenforce ändert man den SELinux modus.

Tools und Infos von Erkennung von SE Linux Problemen

cgi Verzeichnisse auf Webservern

  • Maschinen sollten grundsätzlich besser mit lvm konfiguriert werden, mit etwas Platzreserver - das ist flexibler und erlaubt z.B. Probleme wie dieses leicht und schnell zu beheben
  • die meisten Dateisysteme werden bei uns aus gutem Grund mit den Optionen nosuid,nodev gemountet
    • allerdings ist nosuid problematisch für /var/www/cgi-bin
      • es verhindert die "Transition" von httpd_t nach httpd_sys_script_exec_t beim Start der Scripts
      • deshalb sollte ein separates Dateisystem für /var/www/cgi-bin angelegt werden
        • und nur dieses nicht mit nosuid gemountet werden
      • dann wird kein separater SELinux Modul benötigt, wie
              require {
                type httpd_t;
                type httpd_sys_script_exec_t;
                class file execute_no_trans;
               }
        
               #============= httpd_t ==============
               allow httpd_t httpd_sys_script_exec_t:file execute_no_trans;
      • dieses Modul eröffnet größere Spielräume als ein suid gemountetes /var/www/cgi-bin

SELinux (last edited 2017-11-13 18:13:07 by StephanWiesand)