SELinux für Dateizugriff vom Webserver konfigurieren

In der Standardkonfiguration ist SELinux bei Red Hat Enterprise Linux, CentOS usw. aktiviert. Zurecht! Denn es schafft wirklich ein Mehr an Sicherheit. Es schafft aber leider auch ein Mehr an Problemen, weshalb es oftmals einfach abgeschaltet wird. Die Konfiguration ist hier zu finden: vi /etc/sysconfig/selinux

Wer sein System auch im öffentlichen Internet betreiben will, sollte SELinux unbedingt aktiv betreiben und sich mal mit dessen Konfiguration beschäftigen.

Fehleranalyse

Grundsätzlich funktioniert "irgendwas" nicht, was eigentlich gehen müsste. Es funktionierte normalerweise, weil es kein SELinux gab, welches unkontrollierte Zugriffe unterband. Daher sollte der erste Blick gleich direkt in die entsprechend Logdatei gerichtet werden. tail -f /var/log/audit/audit.log Finden sich dort Einträge wie der folgende, so ist die Sachlage klar!

type=AVC msg=audit(1485953520.108:137): avc: denied { read } for pid=2306 comm="perl" name="datei.txt" dev="sda1" ino=3792 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:default_t:s0 tclass=file type=SYSCALL msg=audit(1485953520.108:137): arch=c000003e syscall=2 success=no exit=-13 a0=169f320 a1=0 a2=1b6 a3=0 items=0 ppid=2212 pid=2306 auid=4294967295 uid=997 gid=995 euid=997 suid=997 fsuid=997 egid=995 sgid=995 fsgid=995 tty=(none) ses=4294967295 comm="perl" exe="/usr/bin/perl" subj=system_u:system_r:httpd_t:s0 key=(null)

Was nicht geht

Es wird oft empfohlen, einfach den Dateizugriff des Webservers auf Dateien pauschal zu aktivieren. SELinux lässt sich aber nicht so leicht austricksen. Wäre ja auch sehr blöd, denn was wäre dann noch an Sicherheit übrig? setsebool -P allow_httpd_anon_write 1 setsebool -P httpd_sys_script_anon_write 1

Wie es funktionierte

Es bedarf eines Hilfsprogramms, um die Konfigurationen bequem vornehmen zu können. yum install policycoreutils-python

Nun können Dateien und/oder Verzeichnisse einfach für den httpd-Prozess freigegeben werden. semanage fcontext -a -t httpd_sys_rw_content_t '/data/datei.txt' restorecon -F -R -v /data/datei.txt

Das war's! ...so die Dateiberechtigungen auf Linux/Unix-Ebene oder gemeine ACLs dieses verhindern. ;-)