Saya memiliki permintaan penerusan nginx ke gunicorn melalui soket unix di /run/gunicorn/socket
. Secara default, perilaku ini tidak diizinkan oleh 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)
Di mana-mana saya melihat (misalnya, di sini dan di sini ), instruksi untuk mengaktifkan ini mengatakan untuk membuat permintaan ke nginx, minta permintaan ditolak oleh SELinux, kemudian jalankan audit2allow
untuk mengizinkan permintaan di masa depan. Saya tidak tahu chcon
atau semanage
perintah apa pun yang memungkinkan perilaku ini secara eksplisit.
Apakah ini satu-satunya jalan? Tampaknya konyol bahwa Anda tidak dapat mengatur kebijakan yang memungkinkan nginx untuk menulis ke soket tanpa terlebih dahulu upaya ditolak dan kemudian menjalankan alat yang memungkinkan hal-hal yang ditolak. Bagaimana Anda tahu persis apa yang sedang diaktifkan? Bagaimana ini bisa berfungsi jika Anda mengatur mesin di bawah otomatisasi?
Saya menggunakan CentOS 7.