【操作系统百科】POSIX capabilities

💡 原文中文,约3000字,阅读约需8分钟。
📝

内容提要

传统 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 选项来管理。

🏷️

标签

➡️

继续阅读