Ich betreibe aktuell einen Puppetmaster auf einem CentOS 7 Node. SELinux soll aktiviert bleiben, als Webserver dient Unicorn und davor ein nginx als Reverse Proxy. Nginx soll auf Unicorn per Unix Socket zugreifen. Dies führt zu folgendem Fehler:
2014/11/14 11:51:28 [crit] 14255#0: *2772 connect() to unix:/var/run/puppet/puppetmaster_unicorn.sock failed (13: Permission denied) while connecting to upstream, client: 37.61.199.26, server: , request: "GET /production/file_metadata/plugins?source_permissions=ignore&links=manage HTTP/1.1", upstream: "http://unix:/var/run/puppet/puppetmaster_unicorn.sock:/production/file_metadata/plugins?source_permissions=ignore&links=manage", host: "puppet.awesome:8140
SELinux loggt Fehler nach /var/log/audit/audit.log
. Zusammen mit Rob Nelson habe ich einige stunden lang debuggt, bis ich bemerkete das SELinux standardmäßig nicht alle Meldungen loggt was das Debugging erschwerte. Mit folgendem Befehl aktiviert man das Logging aller Policies komplett:
semodule --disable_dontaudit --build
Danach finden sich im audit.log folgende zwei Fehlermeldungen:
type=AVC msg=audit(1415962288.172:5772): avc: denied { write } for pid=14255 comm="nginx" name="puppetmaster_unicorn.sock" dev="tmpfs" ino=131185 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:puppet_var_run_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1415962288.172:5772): arch=c000003e syscall=42 success=no exit=-13 a0=1a a1=903688 a2=6e a3=7fff925f8530 items=0 ppid=14254 pid=14255 auid=4294967295 uid=996 gid=995 euid=996 suid=996 fsuid=996 egid=995 sgid=995 fsgid=995 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)
Passende SELinux Regeln um dies zu erlauben kann man wie folgt erstellen:
yum install policycoreutils-python egrep "(nginx|puppetmaster)" /var/log/audit/audit.log | audit2allow -M nginx semodule -i nginx.pp
Der entscheidende Hinweis für das Logging kam von foxxx0 aus dem #archlinux.de IRC channel, er verlinkte auf die Gentoo Wiki Seite über SELinux.
Außerdem war die CentOS Wiki Seite hilfreich.