我正在某些Linux服务器上设置Nagios,但是遇到了一些问题。该check_ide_smart
插件需要对系统具有root访问权限才能运行。要运行它,我使用check_by_ssh
插件将ssh插入远程主机上的nagios帐户,然后check_ide_smart
使用sudo 运行。
最初,我添加了以下几行/etc/sudoers
以允许程序运行:
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart
尽管在本地运行时这很好,但是从Nagios运行时却遇到了一个问题:没有生成TTY,这阻止了插件的工作。
我在sudo的手册页中找到了-s选项,该选项生成一个shell并在其中执行程序。当我尝试使用时sudo -s
,由于-s显然将命令更改为,所以遇到了权限问题/bin/bash -c /usr/lib/nagios/plugins/check_ide_smart
,这是sudoers文件不允许的。我尝试将sudoers文件更改为使用该命令,但这没有用,并且使用引号是语法错误。
我最终通过使用以下行来使其工作/etc/sudoers
:
nagios ALL=/bin/bash
这对我来说真的很不对劲,因为我允许nagios用户生成一个root shell,他们可以用它进行任何操作。
此时,尽管如此,我还是可以通过将命令放入nagios用户具有只读特权的shell脚本中来工作,因此我创建了一个shell脚本:
#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@
不幸的是,我永远无法通过传递的参数( 编辑:我需要引用$@
)来正确使用该插件,因此我不知道这样是否可行。$@
它才能工作。谢谢@derobert和@pjz。我仍然不知道它是否可以工作,因为我可以使用@Mike Arthur的解决方案来工作。
有没有一种方法可以让我sudo -s
在不产生根外壳的情况下工作?
回答:
将以下行添加到/etc/sudoers
:
nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *
注意结尾的星号;没有它,这是行不通的。感谢@Mike Arthur的回答。