我需要 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
,这显然是不好的……
所以,根据设计,它不会按照你想要的方式(以及我想要的方式)工作。