我安装了Nagios VPS,我想使用Nagios来监控 / proc / user_beancounters 文件中的VPS资源。该文件具有以下权限:
-r-------- 1 root root 0 Oct 26 15:53 /proc/user_beancounters
所以我从Nagios Exchange下载了脚本:
在其建议的说明中:
don’t forget to set the s-bit (chmod +s check_UBC.pl)
所以,我复制了脚本,并设置了s-bit,然后以root身份从终端运行它。它按预期工作。然后我删除它创建的临时文件,su进入nagios用户,然后运行脚本。它按预期工作。我删除它创建的临时文件,然后启动Nagios。它无法读取 / proc / user_beancounters 文件!我得到的确切错误是“无法读取/ proc / user_beancounters”。我相信这是由Perl脚本中的行抛出的:
if (! open IN, "<", $UBC )
{
print "could not read $UBC\n";
exit $ERRORS{'CRITICAL'};
}
我的操作系统是 CentOS 6.2版(最终版)。
我的第一个想法是它是某种SELinux voodoo,但没有迹象表明SELinux正在这台服务器上运行。为了以防万一,我尝试了以下内容:
echo 0 > /selinux/enforce
但这没有任何区别。
作为参考,这是我运行的nagios服务:
nagios 12939 0.0 0.0 203652 3404 ? Ssl 15:39 0:00 /usr/sbin/nagios -d /etc/nagios/nagios.cfg
这就是我放置Perl脚本的地方:
-rwsr-sr-x 1 nagios nagios 2934 Oct 26 15:37 check_UBC.pl
有关我还能尝试什么的任何建议吗?
PS道歉,如果这应该在不同的SE站点 - 从不确定涉及脚本,权限等的问题......
更新1
我创建了一个shell脚本,看看我是否可以“模拟”nagios服务。这非常简单:
#!/bin/bash
/usr/lib64/nagios/plugins/check_UBC.pl
现在我拥有以下权限:
-rwsr-sr-x 1 root root 2934 Oct 26 15:37 check_UBC.pl
-rwxrwxrwx 1 root root 51 Oct 26 19:29 check_UBC.sh
以root身份:
[root@/usr/lib64/nagios/plugins]$ ./check_UBC.pl
everything is fine..
[root@/usr/lib64/nagios/plugins]$ ./check_UBC.sh
everything is fine..
作为nagios:
-bash-4.1$ ./check_UBC.pl
everything is fine..
-bash-4.1$ ./check_UBC.sh
everything is fine..
所以仍然没有线索......
更新2
我的nagios命令定义:
define command{
command_name check_beancounters
command_line $USER1$/check_UBC.pl
}
服务定义:
define service{
use local-service
host_name localhost
service_description VPS Beancounters
check_command check_beancounters
}
更新3
我设法让它工作,但是没有关于给予nagios用户完全sudo访问而没有密码的月亮。在/ etc / sudoers中我把它放在最后一行:
nagios ALL=(ALL:ALL) NOPASSWD: ALL
然后将我的命令定义更改为:
define command{
command_name check_beancounters
command_line sudo $USER1$/check_UBC.pl
}
显然,最新版本的linux在运行解释脚本时不会尊重+ s权限,只有二进制文件。所以我想我必须为脚本编译二进制包装器?
更新4
根据Joe Young的建议,我将我的visudo条目更改为:
nagios ALL=NOPASSWD: /usr/lib64/nagios/plugins/check_UBC.pl
希望相对无害!
答案 0 :(得分:1)
尝试将check_UBC.pl
的所有者更改为root
,以便当nagios执行check_UBC.pl
时,该脚本将作为其所有者root
的setuid运行而不是nagios
用户。
chown root:root check_UBC.pl
编辑:
您可以发布调用check_UBC.pl
的命令定义吗?
我能想到的最后一件事就是安装perl-suid模块:https://chrisjean.com/fix-setuid-cannot-exec-sperl/
虽然,如果check_UBC.pl
从命令行运行没有问题,我不确定它会有什么不同。
答案 1 :(得分:0)
将/ proc / user_beancounters的权限更改为444(全部读取?)的风险是什么?它只包含一个数字,对吗?不确定该特定文件是否在重启后“粘附”,或者更糟糕的是,在服务运行时不断更换,所以这可能仍然是一个问题。
另外,在尝试从中读取之前,请考虑尝试测试文件的实际“存在”。由于我们在/ proc目录中,事情确实会不时发生变化......
最后,您要求打开文件,但从语法上讲是要求以只读模式打开?您可能希望尝试系统调用,在shell脚本中简单地“捕获”文件内容,并查看是否收到响应。