Mam prośby o przesłanie przez Nginx do gunicorn przez gniazdo unix w /run/gunicorn/socket
. Domyślnie takie zachowanie nie jest dozwolone przez SELinux:
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)
Gdziekolwiek spojrzę (np. Tutaj i tutaj ), instrukcje pozwalające temu powiedzieć na wysłanie żądania do nginx, mają zostać odrzucone przez SELinux, a następnie uruchomione, audit2allow
aby zezwolić na przyszłe żądania. Nie mogę znaleźć żadnego polecenia chcon
ani semanage
polecenia, które zezwalałoby na to zachowanie.
Czy to jedyny sposób? To absurdalne, że nie można skonfigurować polityki, która pozwala nginx pisać do gniazda bez uprzedniej próby odmowy, a następnie uruchomienia narzędzia, które umożliwia odmowę. Skąd dokładnie wiesz, co jest włączone? Jak to ma działać, jeśli konfigurujesz maszyny w trybie automatyzacji?
Używam CentOS 7.