服务器 Gind.cn

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

限制使用`sudo -s`

我正在一些Linux服务器上设置Nagios,并遇到了一些问题。 check_ide_smart插件需要root权限才能运行系统。 要运行它,我使用check_by_ssh插件ssh到远程主机上的nagios帐户,然后使用sudo运行check_ide_smart 。 我最初/etc/sudoers添加到/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用户具有只读权限将工作,所以我创build了一个shell脚本: #!/bin/sh /bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@ 不幸的是,我永远不能得到传递的参数( $@ )正确地使用插件,所以我不知道这是否会工作。 编辑:我需要引用$@它的工作。 感谢@derobert和@pjz。 我仍然不知道这是否会工作,因为我使用@Mike Arthur的解决scheme来工作。 有没有一种方法可以让sudo -s在不允许生成根shell的情况下工作? 回答: 将以下行添加到/etc/sudoers : nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart * 注意尾部星号; 没有它,这是行不通的。 感谢@Mike亚瑟的答案。