Nginx
Selinux ‘var_t’ 基本類型警告
我目前在 CentOS Selinux 森林中“迷失”了。
我的設置涉及設置一個 WSGI 套接字
/var/www/demo/out
,nginx 使用該套接字與 UWSGI 程序進行通信。每當我在瀏覽器中請求頁面時,我都會收到 nginx 錯誤。為什麼這與 Selinux 有關?
- 禁用 Selinux 並對其進行
setenforce 0
修復。- /var/log/audit/audit.log 和 audit2why 顯示一個
denied
和missing type enforcement (TE) allow rule
我嘗試將
httpd_sys_content_t
標籤添加到套接字,以便允許 nginx 在添加新標籤後讀取和寫入套接字文件 restorecon 。執行違規
audit2allow
會返回以下策略:module nginx 1.0; require { type httpd_t; type var_t; type httpd_sys_content_t; class sock_file write; } #============= httpd_t ============== allow httpd_t httpd_sys_content_t:sock_file write; #!!!! WARNING: 'var_t' is a base type. allow httpd_t var_t:sock_file write;
我理解第一條規則,但是第二條規則傳達的是什麼?我猜是因為 nginx 程序正在請求一個
var_t
包含這個新上下文的新 selinux 策略的 tcontext?那麼為什麼這裡會出現這個警告呢?是否抱怨將 var 之類的目錄添加到策略太籠統/不夠具體?如果是這種情況,這個政策不能縮小到類似的範圍
var_www_t
嗎?此外,如果是這種情況,那麼為什麼允許在非 root 使用者下執行的 uwsgi 程序寫入套接字?
考慮將您的套接字放置在 SELinux 已經期望的位置。
# semanage fcontext -l | grep httpd_var_run_t | grep wsgi /var/run/wsgi.* socket system_u:object_r:httpd_var_run_t:s0
因此,如果您創建
/run/wsgi.anything
並將其用作套接字,那麼它將完美地工作。請記住,由於這是每次啟動時都會清除的臨時目錄,因此您應該在啟動時自己創建套接字,通常使用tmpfiles.d
配置。例如:p+ /run/wsgi.anything 0660 user group - -