Ich habe Nginx-Weiterleitungsanfragen an Gunicorn über einen Unix-Socket an /run/gunicorn/socket
. Standardmäßig ist dieses Verhalten von SELinux nicht zulässig:
grep nginx /var/log/audit/audit.log
type=SERVICE_START msg=audit(1454358912.455:5390): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=nginx comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
type=AVC msg=audit(1454360194.623:7324): avc: denied { write } for pid=9128 comm="nginx" name="socket" dev="tmpfs" ino=76151 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1454360194.623:7324): arch=c000003e syscall=42 success=no exit=-13 a0=c a1=1f6fe58 a2=6e a3=7ffee1da5710 items=0 ppid=9127 pid=9128 auid=4294967295 uid=995 gid=993 euid=995 suid=995 fsuid=995 egid=993 sgid=993 fsgid=993 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1454361591.701:13343): avc: denied { connectto } for pid=9128 comm="nginx" path="/run/gunicorn/socket" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:initrc_t:s0 tclass=unix_stream_socket
type=SYSCALL msg=audit(1454361591.701:13343): arch=c000003e syscall=42 success=no exit=-13 a0=c a1=1f6fe58 a2=6e a3=7ffee1da5950 items=0 ppid=9127 pid=9128 auid=4294967295 uid=995 gid=993 euid=995 suid=995 fsuid=995 egid=993 sgid=993 fsgid=993 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)
Überall, wo ich hinschaue (z. B. hier und hier ), müssen die Anweisungen, die dies ermöglichen, eine Anfrage an nginx stellen, die Anfrage von SELinux abgelehnt und dann ausgeführt werden audit2allow
, um zukünftige Anfragen zuzulassen. Ich kann nicht herausfinden , chcon
oder semanage
Befehl, der dieses Verhalten explizit erlaubt.
Ist das der einzige Weg? Es scheint lächerlich, dass Sie keine Richtlinie einrichten können, die es Nginx ermöglicht, in einen Socket zu schreiben, ohne zuerst einen Versuch abzulehnen und dann ein Tool auszuführen, das Dinge ermöglicht, die abgelehnt wurden. Woher wissen Sie genau, was aktiviert wird? Wie soll das funktionieren, wenn Sie Maschinen unter Automatisierung einrichten?
Ich benutze CentOS 7.