如何使用路径通配符配置 sudoers?

如何使用路径通配符配置 sudoers?

我需要 sudo 来执行特定区域下任何路径的命令。例如:

sudo mycommand /opt/apps/myapp/...

允许此命令在 /opt/apps/myapp 下的任何路径中运行的 sudoers 语法是什么?这是 Solaris 10 sudo。


感谢您的回复,但我不需要命令路径的通配符,而是需要命令参数的通配符。

例如,我们想要做一些类似的事情……

sudo mycmd /opt/userarea/area1
sudo mycmd /opt/userarea/area1/area2
sudo mycmd /opt/userarea/area1/area2/area3

到目前为止,sudoers 中的参数使用通配符如下所示:

/opt/userarea/*
/opt/userarea/*/*

似乎如果我们想要有 N 级目录,那么我们需要在 sudoers 中使用 N 行!有没有更好的方法将所有 N 级目录包含在 sudoers 中的一行中?谢谢。

答案1

Sudo 由文件控制,文件/etc/sudoers告诉它能做什么和不能做什么。我不知道你是否能实现你想要的,原因如下,但是,你可以创建一组命令,如下所示:

Cmnd_Alias TESTAPPS = /opt/dev/myapp/myapp1, /opt/dev/myapp/myapp2

然后,您可以允许某些组仅使用这些命令来运行 sudo。我已将其设置为:

root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL

您还可以添加:

%development    ALL=(TESTAPPS)   ALL

令人困惑的是,第一种情况下的 ALL 表示您从中登录的所有主机,因此您可以阻止从某些主机运行 sudo。

只是一个快速警告 - 如果您这样做并启用对此区域的写访问权限,用户只需从 /bin、/usr/bin 或其他地方复制命令并以 root 身份运行他们喜欢的内容。所以我可以运行它sudo /opt/apps/myapp/rm -rf /,它会起作用。您还需要限制这些命​​令可以运行的位置。

答案2

我正在寻找做同样的事情并发现了这个(公认的老问题)......

经过进一步研究,我发现 sudoers 手册页明确指出,它不会在命令/路径名的通配符匹配中匹配斜杠。来自 sudoers(5)(在“通配符”部分):

请注意,正斜杠('/')将不会与路径名中使用的通配符匹配。

手册页中没有提到这一点,但我认为这显然是为了阻止有权运行命令的人尝试/opt/userarea/*运行类似这样的操作/opt/userarea/../../bin/sh,这显然是不好的……

所以,根据设计,它不会按照你想要的方式(以及我想要的方式)工作。

相关内容