首先:我知道已经有人问过这个问题,但即使使用他们的答案,我仍然无法弄清楚为什么我的命令不起作用。
我想要做的是使用 NRPE 调用远程主机上的脚本。但是,脚本要执行的操作可能只能由特定用户(我们称他为userA
)执行。
现在,我的 NRPE 命令如下所示:
command[debug_now]=/usr/local/bin/debug_now
我的 sudoers 有条目,
nagios ALL=(tomcat) NOPASSWD: /usr/local/bin/debug_now
因为我注意到用户从 nrpe.cfg 调用脚本被称为nagios
。脚本
/usr/local/bin/debug_now
如下:#!/bin/sh whoami echo "Debug..." sudo -u tomcat whoami echo "Debug finished"
上述脚本具有与其他脚本相同的权限,可以由用户执行nagios
。此外,当它在本地执行时,它会漂亮地打印:
nagios
Debug...
tomcat
Debug finished
并且它通常按预期工作。但是,当从管理主机调用它时,它只打印
nagios
Debug...
Debug finished
这可能是由 引起的NRPE: Cannot read output
,每次我尝试sudo
从管理主机执行任何操作时都会出现此错误。我已经尝试添加到 sudoers 条目,Defaults !requiretty
但没有成功。我使用 Debian 6.0.7。当从管理主机调用时,我该怎么做才能使我的脚本正常工作?
编辑。
首先,目录/etc/sudoers.d/
只包含文件 README。
userA
真实名称应该是tomcat
让我们看一下visudo
输出:
Defaults env_reset
Defaults !requiretty
root ALL=(ALL) ALL
nagios ALL=(tomcat) NOPASSWD: /usr/bin/whoami
%www ALL=(ALL) NOPASSWD: /bin/su - www
%tomcat ALL=(ALL) NOPASSWD: /bin/su - tomcat
%tomcat ALL=(ALL) NOPASSWD: /etc/init.d/tomcat stop
%tomcat ALL=(ALL) NOPASSWD: /etc/init.d/tomcat start
%tomcat ALL=(ALL) NOPASSWD: /etc/init.d/tomcat restart
请注意我甚至尝试了nagios ALL=(tomcat) NOPASSWD: ALL
和nagios ALL=(ALL) NOPASSWD: ALL
。我还删除了一些用户条目,例如username ALL=(ALL) NOPASSWD: ALL
。
国家可再生能源计划
$ tail -n 1 /etc/nagios/nrpe.cfg
command[debug_now]=/usr/local/bin/debug_now
$ ls -l /usr/local/bin/debug_now
-rwxr-xr-x 1 root staff 573 Dec 2 09:06 /usr/local/bin/debug_now
$ ls -lh /usr/local | grep bin
drwxrwsr-x 2 root staff 4.0K Dec 2 09:12 bin
$ ls -lh /usr | grep local
drwxrwsr-x 14 root staff 4.0K Oct 22 2010 local
来自另一台主机
$ /usr/lib/nagios/plugins/check_nrpe -H <ip address> -c debug_now
nagios
Debug...
Debug finished
答案1
天啊,我现在感到很羞愧。
一切都很好。你需要重新开始 nagios-nrpe-server
更改后,重新加载是不够的。如果您仅更改或其他配置文件,sudoers
则重新加载即可。 @MadHatter,@Keith - 谢谢你们的帮助!nrpe.cfg
答案2
您的sudoers
条目指定了运行 的权限/usr/local/bin/debug_now
,但您的脚本却显示sudo -u userA whoami
。这不会起作用;无论您想以sudo
权限运行什么命令,它都必须出现在sudoers
文件中。
答案3
我尝试在 Debian Squeeze (6.0.10) 机器上复制您的问题,但没有遇到任何问题。如果您完全按照以下方式进行设置(使用正确的 sudo 设置就像 MadHatter 指出的那样,如果包括权限和模式正确的话,它就会按照您预期的方式运行。
# ls -l /etc/sudoers.d/nagios-test
-r--r----- 1 root root 44 Dec 1 11:36 /etc/sudoers.d/nagios-test
# cat /etc/sudoers.d/nagios-test
nagios ALL=(keith) NOPASSWD:/usr/bin/whoami
# tail -n 1 /etc/nagios/nrpe.cfg
command[debug]=/usr/local/bin/debug
# ls -l /usr/local/bin/debug
-rwxr-xr-x 1 root staff 75 Dec 1 11:37 /usr/local/bin/debug
# cat /usr/local/bin/debug
#!/bin/sh
whoami
echo "Debug..."
sudo -u keith whoami
echo "Debug finished"
从另一台主机:
$ ./check_nrpe -H squeeze -c debug
nagios
Debug...
keith
Debug finished