![细粒度的 sudoers 配置(允许的命令行参数)](https://linux22.com/image/1245283/%E7%BB%86%E7%B2%92%E5%BA%A6%E7%9A%84%20sudoers%20%E9%85%8D%E7%BD%AE%EF%BC%88%E5%85%81%E8%AE%B8%E7%9A%84%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%EF%BC%89.png)
有没有一种直接的方法可以让用户运行(例如)
/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 身份运行任意代码。