限制使用sudo -s
我正在某些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的回答。