為什麼 SELinux 阻止我的 Zabbix 代理的 sudo 呼叫?

為什麼 SELinux 阻止我的 Zabbix 代理的 sudo 呼叫?

我有一些 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 };

正如您所看到的,我設定了一些策略,也許系統管理員是解決這個問題的人(在我執行命令但沒有輸出之前)。

我認為迭代是關鍵,因為在每一步之後,您都會遇到不同的問題,然後應用策略將緩解這些問題。祝你好運!

相關內容