有没有一种直接的方法可以让用户运行(例如)
/usr/bin/pacman -S -u
以 root 身份运行,但不允许他运行
/usr/bin/pacman -S -u some_package
?
线路
user ALL=(root) NOPASSWD: /usr/bin/pacman -S -u
允许两者,并且
user ALL=(root) NOPASSWD: /usr/bin/pacman -S -u ""
从语义上看似乎是等价的。
答案1
对于你的情况,请尝试以下方法:
Cmnd_Alias PACMAN = /usr/bin/pacman -S -u, ! /usr/bin/pacman -S -u some_package
user ALL=(root) NOPASSWD: PACMAN
您可以在 sudoers 文件中使用 shell glob 模式(例如 [az]、[0-9]、* 等)来排除与特定模式匹配的包。
答案2
编写一个执行您需要的操作的脚本并授予其 sudo 访问权限。
另外,还要确保无论在什么环境中运行,都无法访问网络,否则他们只能使用自己的 DNS 来欺骗镜像,然后在 pacman 安装时以 root 身份运行任意代码。