Nginx

Selinux ‘var_t’ 基本類型警告

  • June 6, 2019

我目前在 CentOS Selinux 森林中“迷失”了。

我的設置涉及設置一個 WSGI 套接字/var/www/demo/out,nginx 使用該套接字與 UWSGI 程序進行通信。每當我在瀏覽器中請求頁面時,我都會收到 nginx 錯誤。

為什麼這與 Selinux 有關?

  • 禁用 Selinux 並對其進行setenforce 0修復。
  • /var/log/audit/audit.log 和 audit2why 顯示一個deniedmissing 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 - -

引用自:https://serverfault.com/questions/970274