文章目录
-
- [一. 网络相关 (Network)](#一. 网络相关 (Network))
- [二. 系统与内核管理 (System & Kernel)](#二. 系统与内核管理 (System & Kernel))
- [三. 进程与信号管理 (Process & Signal)](#三. 进程与信号管理 (Process & Signal))
- [四. 文件系统与存储 (Filesystem & Storage)](#四. 文件系统与存储 (Filesystem & Storage))
- [五. 审计与安全 (Audit & Security)](#五. 审计与安全 (Audit & Security))
- [六. IPC (进程间通信)](#六. IPC (进程间通信))
- [七 在 Docker/K8s 中使用](#七 在 Docker/K8s 中使用)
-
- [7.1. 只赋予网络管理能力](#7.1. 只赋予网络管理能力)
- [7.2. 运行需要绑定 80 端口的 Web 服务器](#7.2. 运行需要绑定 80 端口的 Web 服务器)
- [7.3. Kubernetes YAML](#7.3. Kubernetes YAML)
- [八. 安全建议](#八. 安全建议)
在 Linux 内核中,传统的"Root"权限(UID 0)拥有至高无上的权力。然而,这种"全有或全无"的模式存在巨大的安全隐患。为了解决这个问题,Linux 引入了 Linux Capabilities(能力机制) 。
它将 Root 的超级权限拆解为 40多个独立的单元 。进程可以只拥有其中某几项能力,从而执行特定特权操作,而不需要完整的 Root 权限。这就是最小权限原则的核心实现。
以下是 Linux Capabilities的详细分类介绍:
一. 网络相关 (Network)
这些能力允许进程修改网络配置、监听端口或操作数据包。
| 能力名称 | 描述 | 典型应用场景 |
|---|---|---|
CAP_NET_ADMIN |
网络管理。允许配置接口、路由表、防火墙规则、启用混杂模式等。 | ip link, iptables, tcpdump, 容器网络插件CNI。 |
CAP_NET_BIND_SERVICE |
绑定特权端口。允许绑定 TCP/UDP 端口号小于 1024 的服务。 | Nginx/Apache 监听 80/443 端口。 |
CAP_NET_BROADCAST |
广播/多播。允许发送广播消息和监听多播。 | 旧式网络发现协议。 |
CAP_NET_RAW |
原始套接字 。允许创建 RAW 套接字和 PACKET 套接字,直接构造 IP/TCP 头。 ping, tcpdump, Wireshark, 自定义网络扫描工具。 |
|
CAP_NET_AUDIT |
网络审计 。允许接收内核审计子系统发出的网络相关日志。(已废弃,通常由 CAP_AUDIT_CONTROL 替代) |
- |
二. 系统与内核管理 (System & Kernel)
这些能力涉及对内核参数、模块和系统整体行为的控制。
| 能力名称 | 描述 | 典型应用场景 |
|---|---|---|
CAP_SYS_MODULE |
加载/卸载内核模块。允许插入或删除内核模块 (.ko)。 | 安装硬件驱动,Docker-in-Docker (某些场景)。 ⚠️ 极高危 |
CAP_SYS_RAWIO |
原始 I/O 访问 。允许执行 ioperm() 和 iopl(),直接访问硬件端口。 |
底层硬件调试,X服务器(旧版)。 ⚠️ 极高危 |
CAP_SYS_BOOT |
重启系统 。允许调用 reboot() 和 kexec_load()。 |
系统重启服务。 |
CAP_SYS_TIME |
修改系统时钟。允许设置系统时间、实时时钟 (RTC)。 | date -s, NTP 服务。 |
CAP_SYS_TTY_CONFIG |
TTY 配置。允许配置 TTY 设备属性。 | stty 命令。 |
CAP_SYS_PACCT |
进程记账。允许启用或禁用进程会计(process accounting)。 | 系统审计工具。 |
CAP_SYS_ADMIN |
系统管理员(万能钥匙) 。这是一个巨大且杂乱 的能力集合,包括挂载文件系统、设置域名、调整 swappiness、BPF操作等。它是除了 UID 0 之外最强大的能力。 | mount, umount, swapon, sethostname, eBPF程序。 ⚠️ 尽量避免使用 |
注意 :
CAP_SYS_ADMIN被称为"新的 Root",因为它包含的功能太多太杂。在现代安全实践中应尽量拆分使用更细粒度的能力(如CAP_SYS_PTRACE,CAP_SYS_CHROOT等)。
三. 进程与信号管理 (Process & Signal)
这些能力允许进程监控、控制其他进程,甚至忽略资源限制。
| 能力名称 | 描述 | 典型应用场景 |
|---|---|---|
CAP_KILL |
发送信号。允许向任意进程发送信号(不仅仅是自己拥有的进程)。 | kill, systemd 管理服务停止。 |
CAP_SETPCAP |
修改进程能力集 。允许通过 prctl() 或 capset() 修改进程的能力掩码。 |
权限提升/降级工具。 |
CAP_SETUID / CAP_SETGID |
修改 UID/GID。允许任意更改进程的用户 ID 和组 ID。 | su, sudo, SUID 程序。 |
CAP_SETFCAP |
设置文件能力。允许给文件设置 capability 标记(extended attributes)。 | 安装具有特定权限的二进制文件。 |
CAP_SYS_PTRACE |
追踪进程 。允许使用 ptrace() 调试任何进程,读取其内存。 |
gdb, strace, ltrace, 容器运行时检查进程状态。 |
CAP_SYS_RESOURCE |
覆盖资源限制 。允许忽略 ulimit 限制(如打开文件数、CPU时间、内存锁定等)。 |
数据库服务(需要锁定大量内存),高性能应用。 |
CAP_SYS_NICE |
调整优先级。允许提升实时优先级,设置 CPU 亲和性。 | 实时音频处理,高性能计算任务。 |
四. 文件系统与存储 (Filesystem & Storage)
这些能力涉及对文件所有权、挂载点和磁盘底层操作的权限。
| 能力名称 | 描述 | 典型应用场景 |
|---|---|---|
CAP_DAC_OVERRIDE |
绕过文件权限检查。允许忽略文件的读/写/执行权限位(rwx)。只要进程有执行权限,就能读写任何文件。 | 备份软件,恢复工具。 ⚠️ 高危 |
CAP_DAC_READ_SEARCH |
绕过读/搜索权限。允许读取任何文件或目录列表,但不能写入。 | 搜索引擎索引器,备份软件。 |
CAP_FOWNER |
绕过所有者检查 。允许对文件执行通常只有所有者才能做的操作(如 chmod, chown, 设置 ACL),即使你不是所有者。 |
文件管理器,权限管理工具。 |
CAP_CHOWN |
修改文件所有者。允许任意更改文件的所有者 (UID) 和组 (GID)。 | chown 命令。 |
CAP_FSETID |
保留 Set-ID 位。当修改文件时,不清除 set-user-ID 和 set-group-ID 位。 | 包管理器安装 SUID 程序。 |
CAP_LEASE |
建立文件租约。允许在文件上建立租约(lease),用于通知其他进程文件即将被修改。 | 数据库锁机制。 |
CAP_MKNOD |
创建设备节点 。允许使用 mknod() 创建字符/块设备文件和 FIFO。 |
容器初始化脚本创建 /dev/null 等设备。 |
CAP_SYS_CHROOT |
使用 chroot 。允许调用 chroot() 改变根目录。 |
容器隔离,沙箱环境。 |
CAP_LINUX_IMMUTABLE |
修改不可变标志 。允许设置/清除文件的 immutable (不可变) 和 append-only (只追加) 属性。 |
安全加固工具,日志保护。 |
五. 审计与安全 (Audit & Security)
这些能力涉及系统日志、安全策略和密钥管理。
| 能力名称 | 描述 | 典型应用场景 |
|---|---|---|
CAP_AUDIT_WRITE |
写入审计日志。允许向内核审计子系统写入记录。 | 应用层审计日志。 |
CAP_AUDIT_READ |
读取审计日志。允许从审计子系统读取日志_multicast。 | 审计监控代理。 |
CAP_AUDIT_CONTROL |
控制审计子系统。允许启用/禁用审计,修改审计规则。 | auditd 服务。 ⚠️ 高危 |
CAP_MAC_OVERRIDE |
覆盖强制访问控制 (MAC)。允许忽略 SELinux/AppArmor 的策略限制。 | 安全模块调试。 ⚠️ 极高危 |
CAP_MAC_ADMIN |
配置 MAC 系统。允许配置 SELinux/AppArmor 策略。 | 安全管理员工具。 ⚠️ 极高危 |
CAP_SYSLOG |
执行 syslog 操作 。允许读取内核日志环形缓冲区 (dmesg),修改 syslog 配置。 |
日志收集代理,dmesg 命令。 |
CAP_WAKE_ALARM |
触发系统唤醒。允许触发系统从休眠状态唤醒。 | 定时任务,闹钟应用。 |
CAP_BLOCK_SUSPEND |
阻止系统休眠。允许注册阻止系统进入休眠状态的锁。 | 媒体播放器,下载工具。 |
六. IPC (进程间通信)
| 能力名称 | 描述 | 典型应用场景 |
|---|---|---|
CAP_IPC_LOCK |
锁定内存 。允许锁定内存页(mlock),防止被交换到 swap 分区。 |
数据库(Oracle/MySQL),加密软件。 |
CAP_IPC_OWNER |
绕过 IPC 权限检查。允许操作任何 System V IPC 对象(消息队列、共享内存、信号量),无论所有者是谁。 | 跨用户进程通信工具。 |
七 在 Docker/K8s 中使用
在容器环境中,默认情况下,容器只保留了极少数的安全能力(通常是 ~14 个)。你可以通过 --cap-add 和 --cap-drop 来精细控制。
7.1. 只赋予网络管理能力
bash
# 只允许配置网络,不允许其他特权操作
docker run --cap-drop=ALL --cap-add=NET_ADMIN my-network-tool
7.2. 运行需要绑定 80 端口的 Web 服务器
bash
# 不需要 root,只需要绑定低端口权限
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx
7.3. Kubernetes YAML
yaml
securityContext:
capabilities:
drop:
- ALL
add:
- NET_ADMIN
- SYS_PTRACE
另外,可以使用 --privileged 创建特权容器
shell
docker run --privileged my_monitoring_app
八. 安全建议
- Default Deny :始终先
drop: ALL,然后按需add。 - 避免
SYS_ADMIN:除非绝对必要,否则不要添加CAP_SYS_ADMIN。尝试寻找更细粒度的替代方案。 - 警惕
DAC_OVERRIDE:它允许绕过文件权限,相当于给了进程读取/写入任何文件的权力,风险极高。 - 审计:定期审查生产环境中容器的 Capability 配置。