抱歉,这不是正确的 QA 论坛。我想不出在哪里发布这个问题。
Linux 内核支持基于能力的安全性已经有一段时间了,但我没有看到很多发行版利用它。例如,如果我想摆弄数据包过滤规则,我就会sudo su -
像疯子一样iptables
从 shell 中运行。如果我想启动/停止一些虚拟机,砰的一声,它sudo su -
又来了,然后virsh
或其他什么。这非常不安全,更差,很容易做出一些我无意做的事情。
似乎使用功能会更好。如果我希望我的用户foo
能够修改网络堆栈的规则,我应该
- 创建
network_admin
群组 - 创建一个二进制文件
CAP_NET_ADMIN
,提示用户输入密码,然后生成一个 shell - 设置二进制文件的权限位,以便只有成员
network_admin
才能启动 shell - 添加
foo
到我的network_admin
群组
这基本上就是大多数发行版对sudoers
或wheel
组所做的操作,只不过它只有一项功能:完全控制系统。我没有看到任何发行版直接支持类似于这种基于功能的管理工作流程,这让我觉得我误解了这种设置的用处。
sudo
大多数主要发行版仍然使用瑞士军刀而不是更精细的基于能力的方法,这有什么理由吗?
答案1
大多数 Linux 发行版之所以更依赖 sudo 而不是 capabilities,很大程度上是因为它的简单性以及它对用户权限的精细控制。Capability 将 root 的权限划分为一组独立的权限,这些权限可以针对各个程序单独启用或禁用,但管理这些权限可能很复杂,而且通常比一般用例所需的更精细。
sudo
允许系统管理员通过 sudoers 文件将有限的 root 访问权限委托给用户,该文件可以精确指定用户可以运行哪些命令,以及记录正在以 root 权限执行哪些命令以供审计。它还允许简单地过渡到 root 级访问,而无需管理跨不同程序的多组功能,因为这可能容易出错且难以审计。
功能很强大,但其复杂性和管理所需的详细程度意味着它们通常用于更专业的情况,而不是用于日常操作。