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

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.dtcms.com/a/341405.html

相关文章:

  • 【81页PPT】智慧方案智能化弱电智能家居系统解决方案(附下载方式)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘requests-html’问题
  • VPS服务器安全审计方案:从风险评估到防护实施
  • 汇编语言学习3---GDB调试
  • 【StarRocks】TabletChecker逻辑
  • 尝试给每个客户端设置一个标签身份,以此来解决非独立同分布的情况?
  • BM25 vs TF-IDF:经典文本检索方法的对比
  • 门控循环单元(GRU, Gated Recurrent Unit)
  • 压缩--RAR、7-Zip工具使用
  • 【Python】新手入门:python面向对象编程的三大特性是什么?python继承、封装、多态的特性都有哪些?
  • Jmeter接口测试
  • 30. 技术专题-锁
  • K8S-Configmap资源
  • 双模式 RTMP H.265 播放器解析:从国内扩展到 Enhanced RTMP 标准的演进
  • 媒体发稿平台哪家好?媒体新闻发稿渠道有哪些值得推荐?
  • 【知识杂记】陀螺仪直接积分就能获得角度吗?
  • 【C++】C++的类型转换
  • 《P1967 [NOIP 2013 提高组] 货车运输》
  • 多线程 + 事务传播误用导致的问题
  • 【北京迅为】iTOP-4412精英版使用手册-第三十二章 网络通信-TCP套字节
  • 如何排查服务器DNS解析失败的问题
  • TypeScript中的枚举
  • UE5分享序列播放器的停止与设置播放范围
  • 8.20作业
  • [Mysql数据库] 用户管理选择题
  • IIS访问报错:HTTP 错误 500.19 - Internal Server Error
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(一)基本代码
  • python的校园顺路代送系统
  • Seaweed-APT:AI视频生成模型,单步生成2秒钟的1280x720 24fps视频
  • 46.安卓逆向2-补环境-使用unidbg(使用apk文件补环境)