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 *

这应该工作并允许参数.

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...