에서 유닉스 소켓을 통해 gginx에 nginx 전달 요청을했습니다 /run/gunicorn/socket
. 기본적으로이 동작은 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)
어디서나 (예를 들어 here 및 here ), nginx에 요청을하고 SELinux에서 요청을 거부 한 다음 audit2allow
향후 요청을 허용하도록 실행하라는 지시를 내릴 수있는 지침 . 이 동작을 명시 적으로 허용하는 명령 chcon
이나 semanage
명령을 알아낼 수 없습니다 .
이것이 유일한 방법입니까? 먼저 시도를 거부하지 않고 거부 된 것을 가능하게하는 도구를 실행하지 않고 nginx가 소켓에 쓸 수있는 정책을 설정할 수 없다는 것은 우스운 것 같습니다. 무엇이 활성화되어 있는지 정확히 어떻게 알 수 있습니까? 자동화 환경에서 기계를 설정하는 경우 어떻게 작동합니까?
CentOS 7을 사용하고 있습니다.