ฉันมีคำขอส่งต่อ Nginx เพื่อ gunicorn /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