限制使用sudo -s


8

我正在某些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的回答。

Answers:


7

nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *

这应该起作用并允许参数。


那没用。有关详细信息,请参见我的编辑。
克里斯·里布(Chris Lieb)2009年

@Chris Lieb:您必须将呼叫从“ sudo -s ...”更改为“ sudo / bin / bash -c ...”。然后它应该工作。我在这里有类似的设置(不是nagios,但是类似)。
Martin C.

我已经修复它,现在就尝试(带通配符的星号)。
Mike McQuaid)

2

仅供参考,您需要在shell脚本中引用$ @才能正常工作:

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "$@"

$@是魔术。在bash手册页中,

@扩展到位置参数,从1开始。当在双引号内进行扩展时,每个参数都会扩展为单独的单词。也就是说,“ $ @”等效于“ $ 1”“ $ 2” ...如果在单词中出现双引号扩展名,则第一个参数的扩展名将与原始单词的开头部分连接在一起,并且扩展名最后一个参数中的表示与原始单词的最后一部分结合在一起。当没有位置参数时,“ $ @”和$ @扩展为空(即,它们被删除)。

另外,开始bash不会产生任何作用。尽管我对为什么您的nagios插件需要运行终端感到困惑。不应该这样 也许实际的问题是sudo的环境卫生处理?


该插件是唯一引起任何问题的插件。到目前为止,我尚未设置的其他任何文件都不需要root访问权限,因此我不需要为它们使用sudo。因此,我不确定问题是由sudo没有产生外壳程序还是由需要运行外壳程序的check_ide_smart插件引起的。
克里斯·里布(Chris Lieb)

1

无需使用sudo -s和启动root shell,只需让您的nagios用户使用sudo而不使用tty使用即可!requiretty。您/etc/sudoers应该具有以下内容:

# Allow Nagios extra privs
Defaults:nagios !requiretty
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_plugin

...这将允许直接sudo访问,而无需密码和tty。如果要对所有插件进行sudo访问,则可以关闭“ check_ide_plugin”。

我们还使用了NRPE,它似乎比check_by_ssh安全一些,但是需要更多的设置。在/ etc / sudoers中也有相同的想法,只是将nagios与nrpe交换。:)

〜汤米


0

再试一次脚本,但是在$ @处使用双引号:

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "$@"

-1

我认为在不生成root shell的情况下使用-s是不可能的(假设您需要root特权)。-s选项专门用于生成shell。这就是-s的意思。从sudo(8):

-s [command]
    The -s (shell) option runs the shell specified by the SHELL
    environment variable if it is set or the shell as specified
    in passwd(5).  If a command is specified, it is passed to
    the shell for execution.  Otherwise, an interactive shell
    is executed.

1
一个shell被执行了,但是他当前的做法是允许对的任何调用/bin/bash,这也允许生成一个交互式shell,而没有任何限制,并且对可以调用的命令没有任何限制。
Martin C.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.