【操作系统百科】POSIX capabilities
内容提要
传统 Unix 权限分为 root 和非 root,Capabilities 将 root 权限拆分为 40 多个独立能力。每个进程有五个能力集,控制权限的获取和传递。文件能力替代 setuid,Ambient 能力解决 execve 后丢失问题。CAP_SYS_ADMIN 权限过大,正逐步拆分。
关键要点
-
传统 Unix 权限分为 root 和非 root,Capabilities 将 root 权限拆分为 40 多个独立能力。
-
每个进程有五个能力集:Permitted、Effective、Inheritable、Bounding 和 Ambient。
-
文件能力替代 setuid,允许特定文件拥有独立的能力。
-
Ambient 能力解决了非 root 用户在 execve 后能力丢失的问题。
-
CAP_SYS_ADMIN 权限过大,逐步拆分为更小的能力以符合安全原则。
延伸解读
能力集的作用
每个进程的五个能力集(Permitted、Effective、Inheritable、Bounding 和 Ambient)在权限管理中扮演着重要角色。它们不仅决定了进程可以执行的操作,还影响了权限的传递方式,确保系统的安全性和灵活性。理解这些能力集的功能,有助于开发者更好地设计安全的应用程序。
CAP_SYS_ADMIN的风险
CAP_SYS_ADMIN 权限过大,几乎涵盖了所有管理操作,导致其接近 root 权限。这种设计违背了能力分离的初衷,增加了安全风险。因此,逐步拆分该权限成为一种趋势,以减少潜在的安全漏洞。关注这一变化,有助于系统管理员和开发者更好地管理权限。
Ambient能力的优势
Ambient 能力的引入解决了非 root 用户在执行 execve 后能力丢失的问题。这一机制使得用户在执行特定程序时,能够自动获得所需的能力,提升了操作的便利性和安全性。开发者在设计应用时,应考虑如何利用这一特性来优化用户体验。
延伸问答
什么是 POSIX capabilities?
POSIX capabilities 是将传统 Unix 的 root 权限拆分为 40 多个独立能力的机制。
每个进程有哪些能力集?
每个进程有五个能力集:Permitted、Effective、Inheritable、Bounding 和 Ambient。
Ambient 能力有什么作用?
Ambient 能力解决了非 root 用户在 execve 后能力丢失的问题,允许自动传递能力。
如何使用文件能力替代 setuid?
可以通过 setcap 命令为特定文件设置能力,例如:setcap cap_net_raw=ep /usr/bin/ping。
CAP_SYS_ADMIN 权限存在什么问题?
CAP_SYS_ADMIN 权限过大,接近 root 权限,导致安全隐患,因此正在逐步拆分。
Docker 中如何管理 capabilities?
Docker 默认会丢弃大部分 capabilities,可以通过 --cap-drop 和 --cap-add 选项来管理。