Tôi có yêu cầu chuyển tiếp nginx đến gunicorn thông qua một ổ cắm unix tại /run/gunicorn/socket
. Theo mặc định, hành vi này không được cho phép bởi 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)
Ở mọi nơi tôi nhìn (ví dụ, ở đây và ở đây ), các hướng dẫn để kích hoạt tính năng nói này để đưa ra yêu cầu cho nginx, yêu cầu bị từ chối bởi SELinux, sau đó chạy audit2allow
để cho phép các yêu cầu trong tương lai. Tôi không thể tìm ra bất kỳ chcon
hoặc semanage
lệnh nào cho phép hành vi này rõ ràng.
đây có phải cách duy nhất không? Có vẻ nực cười khi bạn không thể thiết lập một chính sách cho phép nginx ghi vào ổ cắm mà không cần phải từ chối trước và sau đó chạy một công cụ cho phép những thứ bị từ chối. Làm thế nào để bạn biết chính xác những gì đang được kích hoạt? Làm thế nào điều này được cho là hoạt động nếu thiết lập máy của bạn theo tự động hóa?
Tôi đang sử dụng CentOS 7.