我在我的一些
Linux服务器上设置Nagios并遇到了一些问题. check_ide_smart插件需要root系统才能运行.要运行它,我使用check_by_ssh插件ssh到远程主机上的nagios帐户,然后使用sudo运行check_ide_smart.
我最初将以下行添加到/ etc / sudoers以允许程序工作:
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart
虽然这在本地运行时工作得很好,但是当它从Nagios运行时我遇到了一个问题:没有生成TTY,这阻止了插件的工作.
我在sudo的man页面中挖了一个-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,用它们可以做任何事情.
此时,我可能通过将命令放在shell脚本中,nagios用户具有只读权限,因此我创建了一个shell脚本:
#!/bin/sh /bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@
不幸的是,我永远无法获得传递的参数($@)来正确使用插件,所以我不知道这是否有效.编辑:我需要引用$@才能正常工作.谢谢@derobert和@pjz.我仍然不知道它是否会起作用,因为我使用@Mike Arthur的解决方案让它工作.
有没有办法在不允许产生根shell的情况下让sudo -s工作?
回答:
在/ etc / sudoers中添加了以下行:
nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *
注意尾随的星号;没有它,这不起作用.谢谢@Mike Arthur的回答.
解决方法
nagios ALL = NOPASSWD:/ bin / bash -c /usr/lib / nagios / plugins / check_ide_smart *
这应该工作并允许参数.