答案1
一旦在命令字段中使用“ALL”关键字定义 sudoers 规范,就无法有效阻止执行特定命令或命令集。这sudoers手册以简单的方式解释这一点:
'!' 的限制操作员
使用“!”从 ALL 中“减去”命令通常无效操作员。用户可以通过将所需的命令复制到不同的名称然后执行该命令来轻松规避此问题。例如:
bill ALL = ALL, !SU, !SHELLS
并不能真正阻止 bill 运行 SU 或 SHELLS 中列出的命令,因为他可以简单地将这些命令复制到不同的名称,或者使用编辑器或其他程序的 shell 转义。因此,此类限制最多应被视为建议性的(并通过政策强化)。
一般来说,如果用户拥有 sudo ALL,则没有什么可以阻止他们创建自己的程序,为他们提供 root shell(或制作自己的 shell 副本),无论任何“!”如何用户规范中的元素。
避免上述情况的唯一方法是拥有用户可以执行的允许命令的列表,即白名单。
答案2
这是不可能的,因为只要您不将 sudoers 文件中的特定命令列入白名单,就总有一种方法可以以 root 身份运行。
如果您不介意完全禁用 root 登录 shell,您可以禁用用户 shell。
当然,任何 sudo 用户仍然可以撤消此操作。
答案3
从组中删除用户sudo
并创建一个新组,例如restricted
。
然后,在/etc/sudoers
(或者更好的是,在 下的文件中/etc/sudoers.d
)添加如下内容:
%restricted ALL=NOPASSWD: /usr/bin/command1,/etc/init.d/command2 restart
该组中的用户将只能运行这些命令。
答案4
我一直在寻找相同的东西,所以这就是我尝试和工作过的
创建了一个名为的组admin
,然后将admin
组添加到etc/sudoers
## Allows people in group wheel to run all commands
admin ALL=(ALL)ALL, !SHELLS, !SU
%wheel ALL=(ALL) ALL
# usermod -aG admin u3
# usermod -aG wheel u3
# su - u3
[u3@localhost ~]$ yum install something
Loaded plugins: product-id, search-disabled-repos, subscription-manager
You need to be root to perform this command.
[u3@localhost ~]$ sudo yum install something
Loaded plugins: product-id, search-disabled-repos, subscription-manager
因此,用户u3
自添加到组以来就拥有 root 权限wheel
,但不会获得 root shell,因此系统管理员将知道u3
使用 sudo/root 权限做了什么。