![Nagios 用户运行 bash 脚本时出现权限错误,同时使用 sudo](https://linux22.com/image/758207/Nagios%20%E7%94%A8%E6%88%B7%E8%BF%90%E8%A1%8C%20bash%20%E8%84%9A%E6%9C%AC%E6%97%B6%E5%87%BA%E7%8E%B0%E6%9D%83%E9%99%90%E9%94%99%E8%AF%AF%EF%BC%8C%E5%90%8C%E6%97%B6%E4%BD%BF%E7%94%A8%20sudo.png)
我想在断电时关闭 NAS 和 ESXI。这两个系统都在 Eaton UPS 上运行。我只运行 Linux 系统,因此无法使用 Eaton Manager,只能使用 Windows。
由于我使用 Nagios 执行其他任务,因此我想创建一个插件,使用 ssh-public-key 可以连接到上述系统并关闭它们。
Nagios 用户的公钥已经安装在 ESXI 的 root 用户上(NAS 稍后会介绍)。 当我将用户更改为 Nagios(在 Nagios 服务器上)并手动运行脚本,它连接到 ESXI 并且(目前)它在 /tmp 上写入“测试文件”。有用。
当脚本由 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 :/
答案1
因此,这里的问题是 SELinux 不允许 Nagios 执行各种操作,而这些操作可能是您真正希望它执行的(例如运行 ssh)。发行版不可能猜出您可能需要 Nagios 执行的所有操作,因此,虽然 SELinux 策略允许大多数与监控相关的操作,但它不允许这些操作。
您可以通过将 Nagios 设置为宽容模式来暂时解决此问题(您不必将所有 SELinux 设置为宽容,您可以针对个别类型执行此操作):
semanage permissive -a nagios_t
完成此操作后,审计日志将随着时间的推移积累您需要的所有 AVC创建自定义 SELinux 策略模块如果您愿意,在安装该自定义策略模块后,您可以返回 SELinux 来强制执行 Nagios。
semanage permissive -d nagios_t
(请注意,除非域是宽松的,否则尝试创建自定义策略模块是行不通的,因为并非所有必要的权限都会在强制模式下触发和记录。)