У мене є запити на переадресацію nginx для перенаправлення через unix-сокет за адресою /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)
Скрізь, де я шукаю (наприклад, тут і тут ), інструкції, що дозволяють цьому сказати, зробити запит на nginx, якщо запит буде відхилено SELinux, а потім запустіть, audit2allow
щоб дозволити майбутні запити. Я не можу зрозуміти жодної команди chcon
чи semanage
команди, яка дозволяє це поведінка явно.
Це єдиний спосіб? Здається смішним, що ви не можете налаштувати політику, яка дозволяє nginx писати в сокет, не спершу спроба відхилена, а потім запущений інструмент, який дозволяє те, що було відхилено. Як ви точно знаєте, що ввімкнено? Як це має працювати, якщо ваші налаштування машин знаходяться під автоматизацією?
Я використовую CentOS 7.