Docker 容器隔离关键技术:Capabilities

Docker 容器隔离关键技术:Capabilities

在 Docker 中,Capabilities 是一种权限管理技术,它将 Linux 系统中传统的超级用户(root)权限拆分为多个独立的小权限(目前为 38 项)。这使得我们可以为容器按需分配权限,而不是直接授予完全的 root 权限。


什么是 Capabilities?

Capabilities 就像一组钥匙,每把钥匙对应某种权限。例如:

  • 一把钥匙允许你绑定网络端口(CAP_NET_BIND_SERVICE)。
  • 另一把钥匙允许你修改文件系统(CAP_SYS_ADMIN)。

通过分配具体的钥匙,你可以让容器只完成特定任务,而不会获取过多的权限。


完整的 Capabilities 列表及作用

以下是 Linux 内核最新版本(5.x)的 38 项 Capabilities,包含每项的作用、引入版本和 Docker 容器中默认是否启用(14 项默认启用的权限已标注)。

名称 作用 引入版本 Docker 默认启用 (14 项)
CAP_AUDIT_CONTROL 管理审计子系统(启用或禁用审计规则)。 Linux 2.6.11
CAP_AUDIT_READ 读取审计日志,用于系统审计工具。 Linux 3.16
CAP_AUDIT_WRITE 写入审计日志(通常用于记录系统事件)。 Linux 2.6.11
CAP_BLOCK_SUSPEND 阻止系统挂起,确保设备不会进入休眠状态。 Linux 3.5
CAP_BPF 加载和操作 eBPF 程序,允许用户空间与内核交互。 Linux 5.8
CAP_CHECKPOINT_RESTORE 执行进程的检查点和恢复操作(如迁移进程状态)。 Linux 5.9
CAP_CHOWN 修改文件或目录的所有权。 Linux 2.2
CAP_DAC_OVERRIDE 绕过文件的权限检查,允许访问受限制的文件。 Linux 2.2
CAP_DAC_READ_SEARCH 绕过目录的只读或搜索权限限制,允许读取特定文件内容。 Linux 2.2
CAP_FOWNER 忽略对文件的只读属性,允许修改文件属性。 Linux 2.2
CAP_FSETID 修改文件的 set-user-ID 或 set-group-ID 标志。 Linux 2.2
CAP_IPC_LOCK 锁定共享内存片段,防止被交换到磁盘。 Linux 2.2
CAP_IPC_OWNER 绕过进程间通信 (IPC) 的权限检查,允许直接访问共享资源。 Linux 2.2
CAP_KILL 向其他进程发送信号,例如 SIGKILL Linux 2.2
CAP_LEASE 修改文件租约属性。 Linux 2.4
CAP_LINUX_IMMUTABLE 修改或删除文件的不可变属性(如 chattr +i 标志)。 Linux 2.2
CAP_MAC_ADMIN 管理强制访问控制 (MAC) 配置,如 SELinux 策略修改。 Linux 2.6.25
CAP_MAC_OVERRIDE 绕过强制访问控制规则,允许访问受限文件或资源。 Linux 2.6.25
CAP_MKNOD 创建特殊文件(如设备文件)。 Linux 2.2
CAP_NET_ADMIN 管理网络配置(如修改路由表、设置网络接口)。 Linux 2.2
CAP_NET_BIND_SERVICE 绑定低号端口(如 80 和 443)。 Linux 2.2
CAP_NET_BROADCAST 使用网络广播和多播数据包。 Linux 2.2
CAP_NET_RAW 使用原始套接字,允许发送或接收低级网络数据。 Linux 2.2
CAP_PERFMON 使用性能监控工具(如 perf,收集内核性能数据)。 Linux 5.8
CAP_SETFCAP 设置文件的功能标志(文件级的 Capabilities)。 Linux 2.6.24
CAP_SETGID 更改进程的 GID(组 ID),包括设置 GID 权限。 Linux 2.2
CAP_SETPCAP 调整进程的 Capabilities 设置,允许进程自身修改权限。 Linux 2.2
CAP_SETUID 更改进程的 UID(用户 ID),包括设置 UID 权限。 Linux 2.2
CAP_SYS_ADMIN 广泛的系统管理权限(如挂载文件系统、修改网络配置),几乎等同于 root 权限。 Linux 2.2
CAP_SYS_BOOT 允许重新启动系统。 Linux 2.2
CAP_SYS_CHROOT 使用 chroot() 系统调用,更改进程的根目录。 Linux 2.2
CAP_SYS_MODULE 加载和卸载内核模块。 Linux 2.2
CAP_SYS_NICE 调整进程优先级,例如设置实时调度策略。 Linux 2.2
CAP_SYS_PACCT 启用或禁用进程审计(Process Accounting)。 Linux 2.2
CAP_SYS_PTRACE 追踪其他进程,例如通过调试器(如 GDB)进行跟踪或注入代码。 Linux 2.2
CAP_SYS_RAWIO 执行直接内存访问或原始设备访问操作。 Linux 2.2
CAP_SYS_RESOURCE 修改系统资源限制(如调整 ulimit 配置)。 Linux 2.2
CAP_SYS_TIME 修改系统时间或时钟。 Linux 2.2
CAP_SYS_TTY_CONFIG 修改 TTY 设备的配置,例如设置串行端口属性。 Linux 2.2

Docker 默认启用的 Capabilities

Docker 容器默认启用了 14 项 Capabilities:

  1. CAP_AUDIT_WRITE
  2. CAP_CHOWN
  3. CAP_DAC_OVERRIDE
  4. CAP_DAC_READ_SEARCH
  5. CAP_FOWNER
  6. CAP_FSETID
  7. CAP_IPC_LOCK
  8. CAP_IPC_OWNER
  9. CAP_KILL
  10. CAP_LEASE
  11. CAP_MKNOD
  12. CAP_NET_BIND_SERVICE
  13. CAP_NET_RAW
  14. CAP_SETUID

其他 Capabilities 默认被禁用,必须通过 --cap-add 显式启用。


在 Docker 中如何使用 Capabilities?

1. 添加特定权限

如果容器需要额外权限(如管理网络接口),可以通过 --cap-add 启用:

bash 复制代码
docker run --cap-add=CAP_NET_ADMIN -it ubuntu
2. 移除默认权限

为了更高的安全性,可以通过 --cap-drop 移除某些默认权限:

bash 复制代码
docker run --cap-drop=CAP_NET_RAW -it ubuntu
3. 移除所有权限

在高安全场景下,可以移除所有权限,仅保留必要权限:

bash 复制代码
docker run --cap-drop=ALL --cap-add=CAP_NET_BIND_SERVICE -it ubuntu

为什么 Capabilities 对容器安全重要?

  1. 按需授权:避免授予容器过多权限,降低被攻击后的风险。
  2. **最小

权限原则**:容器只能执行特定任务,提升隔离性。

  1. 灵活配置:可以根据需要动态调整权限,满足任务需求。

总结

Capabilities 是 Docker 容器隔离的重要技术之一。它将传统 root 权限细化为 38 项小权限,既能满足功能需求,又能最大限度地降低安全风险。

相关推荐
TC139817 分钟前
docker 终端打不开rviz2界面,报错qt.qpa.xcb: could not connect to display
docker·容器
牛马小陈同学1 小时前
Kafka+Zookeeper从docker部署到spring boot使用完整教程
linux·spring boot·docker·zookeeper·kafka·prettyzoo·kafka-ui
蒋星熠1 小时前
在VMware下Hadoop分布式集群环境的配置--基于Yarn模式的一个Master节点、两个Slaver(Worker)节点的配置
大数据·linux·hadoop·分布式·ubuntu·docker
勤奋的树懒2 小时前
本地部署DeepSeek-R1(Dify压力测试和性能调优)
docker·junit·压力测试·ollama·deepseek·dify压力测试·dify性能调优
Brilliant Nemo5 小时前
Docker 镜像相关的基本操作
运维·docker·容器
Ares-Wang5 小时前
Docker Compose 部署Nginx反向代理 tomcat
nginx·docker·tomcat
sauTCc1 天前
Docker初探
docker
c无序1 天前
【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
docker·容器·架构
FixBug_Nick1 天前
使用Docker安装及使用最新版本的Jenkins
docker·容器·jenkins
Zero_to_zero12341 天前
解决docker的ubuntu系统中文乱码问题
ubuntu·docker·容器