linux – 限制使用`sudo -s`

前端之家收集整理的这篇文章主要介绍了linux – 限制使用`sudo -s`前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的一些 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 *

这应该工作并允许参数.

猜你在找的Linux相关文章