我在 CentOS 7 機器上安裝了 zabbix(一個監控應用程式)。出於安全目的,我想將 selinux 保留為強制模式。因此我必須授予我的 zabbix 一些權限才能運作。如果我執行以下命令:
ausearch -c zabbix_server -m AVC -i -ts today | audit2allow -m ztest
我得到以下輸出:
...
require {
type unlabeled_t;
type zabbix_var_run_t;
type zabbix_t;
class sock_file { create unlink };
class unix_stream_socket connectto;
class file { getattr open read };
}
#========== zabbix_t ==============
#!!!!! This avc can be allowed using the boolean 'daemons_enable_cluster_mode'
allow zabbix_t self:unix_stream_socket connectto;
#!!!!! WARNING 'unlabeled_t' is a base type.
allow zabbix_t unlabeled_t:file { getattr open read };
allow zabbix_t zabbix_var_run_t:sock_file { create unlink };
經過一番研究後,我發現 /etc/zabbix/zabbix_server.conf 檔案的檔案上下文類型為 unlabeled_t,這就是audit2allow 建議我允許 zabbix_server 使用 unlabeled_t 的原因。但由於允許基本類型是一個壞主意,因此我正在尋找一種方法來解決這個問題。我已經查看了 zabbix_selinux 線上說明頁面(https://www.systutorials.com/docs/linux/man/8-zabbix_selinux/),但確實沒有合適的上下文文件類型。我知道,我可以創建自己的文件上下文類型,但我並不是真正的專家,所以我不知道這是否是最好的解決方案。所以我的問題是,是否有更好的方法,或者如果我不想使用基本類型 unlabeled_t,我是否真的需要創建自己的文件上下文類型?
答案1
您可能從不支援 SELinux 的來源安裝了 Zabbix,或者可能在安裝時停用了 SELinux。
如果 Zabbix 不是從支援 SELinux 的軟體包安裝的,那麼運行時很可能restorecon -R -v /etc
會自動將unlabeled_t
標籤更改為其他內容,可能是etc_t
,因為這似乎是 下文件和目錄的預設標籤/etc
。您可能應該在使用之前這樣做audit2allow
。
etc_t
對於大多數設定檔來說,這將是一個很好的上下文類型。
RHEL/CentOS 7.x 的 SELinux 規則集實際上對 Zabbix 有一些內建規定:目錄/etc/zabbix/web/
及其中的任何檔案都會被標記httpd_sys_rw_content_t
,Zabbix 的啟動腳本(伺服器和代理程式)將分別獲得適當的標籤zabbix_initrc_exec_t
和zabbix_agent_initrc_exec_t
。
以下內容來自根本沒有安裝 Zabbix 軟體包的「普通」RHEL 7.7 測試虛擬機器:
[root@localhost etc]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo)
[root@localhost etc]# semanage fcontext -l |grep zabbix
/var/log/zabbix.* all files system_u:object_r:zabbix_log_t:s0
/etc/zabbix/web(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
/var/lib/zabbix(/.*)? all files system_u:object_r:zabbix_var_lib_t:s0
/var/run/zabbix(/.*)? all files system_u:object_r:zabbix_var_run_t:s0
/etc/rc\.d/init\.d/(zabbix|zabbix-server) regular file system_u:object_r:zabbix_initrc_exec_t:s0
/var/lib/zabbixsrv(/.*)? all files system_u:object_r:zabbix_var_lib_t:s0
/usr/lib/zabbix/externalscripts(/.*)? all files system_u:object_r:zabbix_script_exec_t:s0
/var/lib/zabbix/externalscripts(/.*)? all files system_u:object_r:zabbix_script_exec_t:s0
/usr/bin/zabbix_server regular file system_u:object_r:zabbix_exec_t:s0
/usr/bin/zabbix_agentd regular file system_u:object_r:zabbix_agent_exec_t:s0
/usr/sbin/zabbix_proxy regular file system_u:object_r:zabbix_exec_t:s0
/usr/sbin/zabbix_agentd regular file system_u:object_r:zabbix_agent_exec_t:s0
/usr/sbin/zabbix_server regular file system_u:object_r:zabbix_exec_t:s0
/usr/sbin/zabbix_proxy_mysql regular file system_u:object_r:zabbix_exec_t:s0
/usr/sbin/zabbix_proxy_pgsql regular file system_u:object_r:zabbix_exec_t:s0
/usr/sbin/zabbix_server_mysql regular file system_u:object_r:zabbix_exec_t:s0
/usr/sbin/zabbix_server_pgsql regular file system_u:object_r:zabbix_exec_t:s0
/etc/rc\.d/init\.d/zabbix-agentd regular file system_u:object_r:zabbix_agent_initrc_exec_t:s0
/usr/sbin/zabbix_proxy_sqlite3 regular file system_u:object_r:zabbix_exec_t:s0
/usr/sbin/zabbix_server_sqlite3 regular file system_u:object_r:zabbix_exec_t:s0