当前位置: 首页 > ops >正文

Linux Capability 解析

文章目录

    • 1. 权限模型演进背景
    • 2. Capability核心原理
      • 2.1 能力单元分类
      • 2.2 进程三集合
      • 2.3 文件系统属性
    • 3. 完整能力单元表
    • 4. 高级应用场景
      • 4.1 能力边界控制
      • 4.2 编程控制
      • 4.3 容器安全
    • 5. 安全实践建议
    • 6. 潜在风险提示

1. 权限模型演进背景

在传统UNIX权限模型中,采用二进制特权划分(普通用户 vs root用户)存在显著缺陷:

  1. 权限颗粒度过粗
  2. 特权程序攻击面过大
  3. 特权继承难以控制

Linux Capability机制应运而生(始于2.2内核),实现:

  • 特权操作的细粒度划分
  • 动态权限分配与控制
  • 最小特权原则实施

2. Capability核心原理

2.1 能力单元分类

将root特权分解为独立能力单元,每个单元对应特定操作权限(当前内核6.x共41项)

2.2 进程三集合

集合类型作用描述特性
Permitted能力允许的最大集合静态上限,不可自增
Effective当前实际生效的能力运行时动态切换
Inheritable可被子进程继承的能力影响exec执行时的能力转移

2.3 文件系统属性

通过扩展属性存储执行时的能力分配策略:

  • setuid程序特权执行时的能力赋值规则
  • 二进制文件的能力白名单定义

3. 完整能力单元表

能力名称内核版本权限描述
CAP_AUDIT_CONTROL2.6.11+配置审计子系统
CAP_AUDIT_READ3.16+读取审计日志(RAW/非翻译格式)
CAP_AUDIT_WRITE2.6.11+生成审计日志记录
CAP_BLOCK_SUSPEND3.5+阻止系统挂起(epoll系统调用)
CAP_BPF5.8+管理BPF程序和映射
CAP_CHECKPOINT_RESTORE5.9+内核checkpoint/restore操作
CAP_CHOWN2.2+任意文件属主修改
CAP_DAC_OVERRIDE2.2+绕过文件读、写、执行权限检查
CAP_DAC_READ_SEARCH2.2+绕过目录读/搜索权限检查
CAP_FOWNER2.2+忽略文件属主检查(如chmod操作)
CAP_FSETID2.2+设置setuid/setgid时保留位
CAP_IPC_LOCK2.2+锁定内存(mlock/mlockall)
CAP_IPC_OWNER2.2+绕过IPC所有权检查
CAP_KILL2.2+绕过信号发送权限检查
CAP_LEASE2.4+建立文件租约(fcntl F_SETLEASE)
CAP_LINUX_IMMUTABLE2.2+设置FS_IMMUTABLE和FS_APPEND_FL属性
CAP_MAC_ADMIN2.6.25+配置MAC策略(SELinux/SMACK等)
CAP_MAC_OVERRIDE2.6.25+覆盖强制访问控制(MAC)
CAP_MKNOD2.4+创建设备特殊文件(mknod)
CAP_NET_ADMIN2.2+网络配置(接口、防火墙、QoS等)
CAP_NET_BIND_SERVICE2.2+绑定低端口(<1024)
CAP_NET_BROADCAST2.2+网络广播、组播操作
CAP_NET_RAW2.2+RAW/PACKET套接字操作
CAP_PERFMON5.8+系统性能监控与观察
CAP_SYS_ADMIN2.2+系统管理操作(挂载、ns操作、swapon等)
CAP_SYS_BOOT2.2+触发系统重启(reboot)
CAP_SYS_CHROOT2.2+使用chroot()系统调用
CAP_SYS_MODULE2.2+加载/卸载内核模块
CAP_SYS_NICE2.2+提升进程nice值,修改调度策略
CAP_SYS_PACCT2.4+配置进程记账(acct)
CAP_SYS_PTRACE2.4+ptrace调试任意进程
CAP_SYS_RAWIO2.2+直接端口访问(ioperm/iopl)和内存操作
CAP_SYS_RESOURCE2.2+覆盖资源限制(如Disk quota)
CAP_SYS_TIME2.2+修改系统时钟/硬件时钟
CAP_SYS_TTY_CONFIG2.6.4+虚拟终端配置(vhangup)
CAP_SYSLOG2.6.37+特权syslog操作(kernel printk速率限制等)
CAP_WAKE_ALARM3.11+设置唤醒定时器(RTC唤醒)

注:统计截至Linux 6.4内核版本,能力定义位于include/uapi/linux/capability.h

4. 高级应用场景

4.1 能力边界控制

# 授予Nginx绑定低端口特权
setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx# 查看二进制文件能力
getcap /usr/sbin/nginx

4.2 编程控制

#include <sys/capability.h>
// 动态放弃能力
cap_t caps = cap_get_proc();
cap_clear_flag(caps, CAP_EFFECTIVE);
cap_set_flag(caps, CAP_PERMITTED, CAP_NET_RAW, CAP_CLEAR);
cap_set_proc(caps);
cap_free(caps);

4.3 容器安全

# 仅允许容器修改系统时间
docker run --cap-drop ALL --cap-add SYS_TIME -it alpine

5. 安全实践建议

最小权限原则
仅授予必要的能力集,通过 capsh --drop=XXX 启动进程
文件能力审查
定期使用 getcap -r / 检查全盘文件能力设置
运行时监控
结合 /proc/[pid]/status 中的CapEff/CapPrm/CapInh字段监控进程能力
命名空间隔离
结合user/network/mount等namespace限制能力作用域
审计系统集成
监控 CAP_AUDIT_* 相关能力的异常使用

6. 潜在风险提示

不可撤销特权
部分能力一旦获取无法主动放弃(如CAP_SYS_MODULE)
隐式权限提升
某些系统调用可能隐含多个能力需求
组合攻击向量
看似无关的两个能力组合可能产生提权风险
内核版本差异
新能力在不同发行版中的支持情况需精确验证

http://www.xdnf.cn/news/18271.html

相关文章:

  • strncpy 函数使用及其模拟实现
  • 为什么我的UI界面会突然卡顿,失去响应
  • 安装使用Conda
  • pyqt 的自动滚动区QScrollArea
  • Rust 入门 包 (二十一)
  • Ubuntu 虚拟显示器自动控制服务设置(有无显示器的切换)
  • 华为数通认证学习
  • 微算法科技(NASDAQ: MLGO)引入高级区块链DSR算法:重塑区块链网络安全新范式
  • K8S-Configmap资源
  • C++中的 Eigen库使用
  • 数据库DML语言(增、删、改)
  • oracle服务器导入dmp文件
  • Causal-Copilot: An Autonomous Causal Analysis Agent 论文解读
  • 栈的概念(韦东山学习笔记)
  • C#APP.Config配置文件解析
  • Java内功修炼(2)——线程安全三剑客:synchronized、volatile与wait/notify
  • 5.4 4pnpm 使用介绍
  • kotlin 协程笔记
  • AI 创业公司分析报告:RealRoots
  • 0基础安卓逆向原理与实践:第2章:编程基础与工具链
  • 使用PCL读取PCD点云文件
  • Pandas 数据处理核心操作:合并、替换、统计与分组
  • 分贝单位全指南:从 dB 到 dBm、dBc
  • 深入解析EventPoller:Disruptor的轮询式事件处理机制
  • k8s笔记01
  • 服务器硬盘进行分区和挂载
  • SLAM文献之-Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping
  • AI +金融 = 七大核心维度+ 落地典型困难
  • 【Golang实战】Go Module 双段 require 配置深度解析
  • Lecture 5 GPUs课程笔记