Nagios 用户运行 bash 脚本时出现权限错误,同时使用 sudo

Nagios 用户运行 bash 脚本时出现权限错误,同时使用 sudo

我想在断电时关闭 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

(请注意,除非域是宽松的,否则尝试创建自定义策略模块是行不通的,因为并非所有必要的权限都会在强制模式下触发和记录。)

相关内容