
我有一些 Zabbix 檢查需要 sudo。這些是 /etc/sudoers.d/zabbix 的內容
zabbix ALL=(ALL) NOPASSWD: /bin/yum history
zabbix ALL=(ALL) NOPASSWD: /bin/needs-restarting
zabbix ALL=(ALL) NOPASSWD: /sbin/check31
zabbix ALL=(ALL) NOPASSWD: /usr/sbin/crm_mon --as-xml
當我從 Zabbix 代理強制檢查時,出現以下權限被拒絕錯誤(pacemaker.status 使用/usr/sbin/crm_mon --as-xml
):
bash-5.0$ zabbix_get -s my-server -k pacemaker.status
sudo: PAM account management error: System error
sudo: unable to send audit message: Permission denied
我透過暫時將 SELinux 設定為寬容模式來驗證 SELinux 確實阻止了我的呼叫。
然後,我嘗試透過執行以下步驟來允許這些呼叫。
首先,我輪換了審核日誌,因為它充滿了以前問題中的不相關訊息:
service auditd rotate
然後我從政策中刪除了所有不審計:
semodule -DB
zabbix_get
在 Zabbix 代理程式上,我透過執行上述呼叫觸發了錯誤。
從日誌中我建立了一個 SELinux 模組並使用以下命令安裝它semodule
:
cat /var/log/audit/audit.log | audit2allow -M zabbix-agent
semodule -i zabbix-agent.pp
儘管如此,當我執行時,我在發送審核訊息時遇到了相同的權限被拒絕錯誤zabbix_get
。我做了一些研究,關閉 dontaudits 應該可以解決這個問題,並強制 SELinux 記錄額外的訊息來解決這個問題,但我已經這樣做了,但它不適用於我的情況。
這是已建置的zabbix-agent.te
文件audit2allow
:
module zabbix-agent 1.0;
require {
type zabbix_agent_t;
type chkpwd_exec_t;
class unix_dgram_socket create;
class file execute_no_trans;
class netlink_audit_socket create;
}
#============= zabbix_agent_t ==============
allow zabbix_agent_t chkpwd_exec_t:file execute_no_trans;
allow zabbix_agent_t self:netlink_audit_socket create;
allow zabbix_agent_t self:unix_dgram_socket create;
答案1
你試過了嗎:
setsebool -P zabbix_can_network=1
如果您已經允許上述操作,那麼您可以嘗試以下操作:
yum install policycoreutils-python
semanage permissive -a zabbix_agent_t
祝你好運
答案2
我遇到了類似的問題(在啟用了 selinux 的電腦上執行 RAID 控制器檢查)。
對我來說缺少的連結是:
semodule-DB
啟用一些非稽核策略。然後重新奪回政策。
參考資料是:https://forums.centos.org/viewtopic.php?t=62829 當您捕獲時,首先將 selinux 設定為寬容非常重要。與您非常相似,我做了類似的事情(在設置為寬鬆並捕獲和應用策略之後):
日誌輪換,刪除舊日誌:
service auditd rotate
semodule -DB(不禁用審核規則)
- 從 zabbix 運行命令(配置 - 主機 - 執行一次)
運行以下命令來獲取策略文件
grep -i avc /var/log/audit/audit.log | grep -i avc /var/log/audit/audit.log | Audit2allow -M 策略x
跑步
semodule -i 策略x.pp
再次在Zabbix中執行指令檢查是否有效
跑步
semodule-B
再次啟用無審核規則。
我的 sudoers 規則如下所示:
zabbix ALL=(root) NOPASSWD: /opt/MegaRAID/storcli/storcli64
我嘗試過 zabbix 使用者(沒有登入 shell)是否可以執行以下命令:
su -s /bin/bash -c 'sudo /opt/MegaRAID/storcli/storcli64 /c0 /eall /sall show' zabbix
我建議對您的命令嘗試相同的操作,以確保以 zabbix 使用者身分正確執行。
我還在 sudoers 和shadow 檔案上使用了restorecon,但不確定這是否有幫助。我還在運行的腳本上設定了 zabbix_agent_t 上下文,但這可能沒有效果。
最後但並非最不重要的一點是,這是我應用的策略文件,它對我有用,也許您可以編譯並應用它,看看它是否有效:
cat mypolz1.te
module mypolz1 1.0;
require {
type zabbix_exec_t;
type zabbix_agent_t;
type system_dbusd_t;
class capability { net_admin sys_admin };
class dbus send_msg;
class unix_dgram_socket write;
class file { execute execute_no_trans };
class netlink_audit_socket { read write };
}
#============= zabbix_agent_t ==============
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t self:capability net_admin;
allow zabbix_agent_t self:capability sys_admin;
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t self:netlink_audit_socket { read write };
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t self:unix_dgram_socket write;
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t system_dbusd_t:dbus send_msg;
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t zabbix_exec_t:file { execute execute_no_trans };
正如您所看到的,我設定了一些策略,也許系統管理員是解決這個問題的人(在我執行命令但沒有輸出之前)。
我認為迭代是關鍵,因為在每一步之後,您都會遇到不同的問題,然後應用策略將緩解這些問題。祝你好運!