Nagios 使用者執行 bash 腳本時出現權限錯誤,同樣使用 sudo
我想在出現電源故障時關閉我的 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
(請注意,除非域是允許的,否則嘗試創建自定義策略模組是行不通的,因為並非所有必要的權限都會被觸發並以強制模式登錄。)