如何通过LinuxCapabilities精细化拆解并精简容器内的特权标志

秋涛酱_3564

秋涛酱_3564

2026-05-26

1003人浏览

原创

linux capabilities是内核提供的细粒度权限机制,将root特权拆分为40+个独立能力;docker默认保留约14项,安全实践应从--cap-drop=all起步,按需添加如cap_net_bind_service等必要能力,结合capsh --print验证、strace定位真实依赖,并在k8s中通过securitycontext.capabilities精细化管控。

如何通过linuxcapabilities精细化拆解并精简容器内的特权标志

Linux Capabilities 是 Linux 内核提供的细粒度权限控制机制,它把传统 root 的“全有或全无”特权拆解为 40+ 个独立能力(如 CAP_NET_BIND_SERVICE、CAP_SYS_TIME)。在容器中,合理使用 --cap-drop 和 --cap-add 能显著缩小攻击面,避免以 root 运行却拥有不必要的内核权限。

理解默认行为与最小化起点

Docker 默认启动容器时会保留约 14 个常用 capability(如 CAP_CHOWN、CAP_SETUIDS、CAP_NET_BIND_SERVICE),但移除 CAP_AUDIT_WRITE、CAP_SYS_ADMIN 等高危项。安全实践建议:从 --cap-drop=ALL 开始,再按需逐个添加必要能力,而非默认保留再删减。

  • 运行容器时加 --cap-drop=ALL 后,普通非 root 进程几乎无法执行任何特权操作
  • 若应用需监听 80 端口,仅添加 --cap-add=CAP_NET_BIND_SERVICE,无需开 CAP_SYS_ADMIN
  • 用 capsh --print 在容器内验证当前生效的能力集,确认无冗余项

识别真实依赖:从进程行为反推所需能力

不要凭经验猜测,而应观察进程实际系统调用。推荐组合使用 strace + capsh 定位缺失能力:

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 在开发环境用 strace -e trace=capget,setuid,setgid,socket,bind,openat 运行程序,关注 EPERM 错误的上下文
  • 若日志出现 Operation not permitted 且发生在 clock_settime(),说明需要 CAP_SYS_TIME
  • 若容器内 mount 失败,先检查是否真需挂载 —— 多数场景可用 bind mount 或 volume 替代,无需 CAP_SYS_ADMIN

规避高危 capability 的替代方案

某些 capability 风险极高,应优先考虑替代路径而非直接授予:

  • CAP_SYS_ADMIN:覆盖文件系统、命名空间、设备管理等数十种操作,绝大多数容器无需。用 docker run --tmpfs /run --read-only 或预置配置文件代替运行时修改
  • CAP_NET_ADMIN:用于配置路由、iptables 等。网络策略交由宿主机或 CNI 插件处理,容器内只收发流量
  • CAP_DAC_OVERRIDE:绕过文件读写权限检查。改为用 chown 初始化数据卷权限,或以匹配 UID/GID 的用户运行

在 Kubernetes 中落地精细化管控

K8s 通过 securityContext.capabilities 支持相同语义,但需注意字段层级和默认继承逻辑:

  • Pod 级设置会作用于所有容器;容器级设置可覆盖 Pod 级,更推荐后者
  • 示例配置中显式声明 drop: ["ALL"] 和 add: ["NET_BIND_SERVICE"],不依赖注释或文档推测
  • 配合 runAsNonRoot: true 和 readOnlyRootFilesystem: true 形成纵深防御

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3910

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3353

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2493

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6030

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5662

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3333

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2825

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3059

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习