Centos

Nagios 使用者執行 bash 腳本時出現權限錯誤,同樣使用 sudo

  • April 14, 2021

我想在出現電源故障時關閉我的 NAS 和 ESXI。這兩個系統都在伊頓 UPS 上執行。我只執行 Linux 系統,因此我不能使用 Eaton Manager,僅限 Windows。

由於我將 Nagios 用於其他任務,因此我想創建一個外掛,使用 ssh-public-key 可以連接到上述系統並關閉它們。

Nagios 使用者的公鑰已經安裝在 ESXI 的 root 使用者上(NAS 稍後會出現)。 當我將使用者更改為 Nagios(在 Nagios 伺服器上)並手動執行腳本時,它會連接到 ESXI 並且(目前)它會在 /tmp 上寫入一個“testfile”。它有效

當腳本由 Nagios 自己執行時,它不會. 此腳本作為處理程序執行:

define host {
   name                            home-monitoring
   use                             generic-host
   check_period                    24x7
   check_interval                  5
   contact_groups                  admins
   event_handler                   poweroff_host
   register                        0
}

cat /usr/lib64/nagios/plugins/poweroff_host.sh

#!/bin/bash
/usr/bin/ssh root@esxi -i /var/spool/nagios/.ssh/id_rsa "touch /tmp/testfile"

cat /etc/nagios/objects/commands.cfg

define command{
       command_name    poweroff_host
       command_line    sudo /usr/lib64/nagios/plugins/poweroff_host.sh
}

visudo

(at the bottom of the file)
nagios ALL = (root) NOPASSWD:/usr/lib64/nagios/plugins/poweroff_host.sh

我還將 nagios 使用者添加到了 wheel 組(使用 usermod)

# grep wheel /etc/group
wheel:x:10:nagios

最後,在過去的 4 天裡,我一直在這裡打我的頭,並且在日誌中不斷出現錯誤。最後一個錯誤是:

journalctl -xef

stderr line 01: /usr/lib64/nagios/plugins/poweroff_host.sh: line 2: /usr/bin/ssh: Permission denied

在 visudo 之前,錯誤是no ssh in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin),至少現在我設法改變了錯誤的類型。

我可以請一些幫助並解決問題嗎?

更新 1:

[root@nagios ~]# audit2allow -i /var/log/audit/audit.log


#============= nagios_t ==============
allow nagios_t ldconfig_exec_t:file { execute getattr };
allow nagios_t nagios_spool_t:dir create;
allow nagios_t pam_var_run_t:dir write;
allow nagios_t ssh_exec_t:file { execute getattr };
allow nagios_t tmpfs_t:dir write;

快進到semodule命令,但 stderr line 01: /usr/lib64/nagios/plugins/poweroff_host.sh: line 2: /usr/bin/ssh: Permission denied仍然存在:/

我將嘗試完全禁用 Selinux:/

所以這裡的問題是 SELinux 不允許 Nagios 做各種各樣的事情,大概是你真正希望它做的事情(比如執行 ssh)。發行版不可能猜出您可能需要 Nagios 做的所有事情,因此雖然 SELinux 策略允許大多數與監控相關的事情,但它不允許這些事情。

您可以通過將 Nagios 設置為許可模式暫時解決此問題(您不必將所有 SELinux 設置為許可模式,您可以針對個別類型進行設置):

semanage permissive -a nagios_t

完成此操作後,審核日誌將隨著時間的推移累積創建自定義 SELinux 策略模組所需的所有 AVC ,如果您願意,安裝該自定義策略模組後,您可以返回 SELinux 以強制執行 Nagios。

semanage permissive -d nagios_t

(請注意,除非域是允許的,否則嘗試創建自定義策略模組是行不通的,因為並非所有必要的權限都會被觸發並以強制模式登錄。)

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