Linux怎么查看指定进程拥有的LinuxCapabilities权限集合

老宇同学_8352

老宇同学_8352

2026-11-07

841人浏览

原创

最准、最轻量的方式是直接读取/proc/[pid]/status中的Cap*字段并用capsh --decode解码,CapEff为内核权限检查唯一依据,全零表示无生效能力,CapPrm表上限,CapBnd为硬边界,普通用户可读自身进程,结果可靠且不依赖进程运行状态或ptrace限制。

linux怎么查看指定进程拥有的linuxcapabilities权限集合

直接看 /proc/[pid]/status 里的 Cap 字段,再用 capsh --decode 解码——这是最准、最轻量的方式,不依赖进程是否还在运行或是否被 ptrace 限制。

查 /proc/[pid]/status 中的 Cap* 字段

Linux 内核把每个进程的五种能力集(CapInh、CapPrm、CapEff、CapBnd、CapAmb)以十六进制位图形式写在 /proc/[pid]/status 里。只要进程没退出,这个文件就可读。

  • CapEff 是最关键的:内核做权限检查时只看它,值为 0000000000000000 意味着当前没启用任何能力
  • CapPrm 表示“允许使用的能力上限”,但不等于已生效;如果 CapEff 全零而 CapPrm 非零,说明程序没主动启用能力(比如没调 cap_set_proc())
  • CapBnd 是硬性边界,所有能力都不能超出它;容器环境常被清空部分位(如移除 CAP_SYS_ADMIN)
  • 普通用户也能读自己启动的进程的这些字段,无需 root 权限

命令示例:

cat /proc/1234/status | grep Cap

输出类似:

CapInh: 0000000000000000
CapPrm: 00000000a80425fb
CapEff: 00000000a80425fb
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000

用 capsh --decode 解码十六进制值

capsh --decode 是唯一能准确把位图转成能力名的标准工具,不依赖 libc 或 shell 环境变量,结果可靠。

Linuxdo Application
Linuxdo Application

为 Linux.do 注册撰写高通过率、去 AI 化的中文小作文。进行自适应调查以了解申请人的真实背景,...

下载
  • 必须传入完整 16 字符(或 32 字符)十六进制字符串,少一位会解错(例如 00000000a80425fb 不是 a80425fb)
  • 一个值可能对应多个能力,比如 00000000a80425fb 解出来含 cap_net_bind_service、cap_kill、cap_sys_ptrace 等十多个
  • 如果解码后为空,不是没能力,而是该位图全零(0000000000000000),代表没启用任何能力

示例:

capsh --decode=00000000a80425fb

getpcaps 和 pscap 的适用场景与局限

getpcaps 和 pscap 看起来更“高级”,但实际有明显限制:

  • getpcaps 1234 本质也是读 /proc/1234/status,再调 capsh --decode,多一层封装,出错时反而难定位
  • pscap -a 依赖 /proc 下所有 PID 目录可遍历,某些安全加固系统(如 grsecurity 补丁)会禁止非 root 查看其他用户进程,此时直接报 “Permission denied”
  • 它们对 CapAmb(环境能力)支持不一致,内核 4.3+ 引入的 CapAmb 在旧版 pscap 中可能被忽略

为什么不能只看 getcap?

getcap /path/to/binary 查的是**文件 capability**,不是进程当前持有的能力集:

  • 二进制文件设置了 cap_net_bind_service+ep,不代表进程一定拥有它——如果 execve 时被 CapBnd 过滤掉,或父进程主动 drop 掉了,CapEff 就是空的
  • 进程可能通过 capset() 系统调用动态增删能力,getcap 完全看不到这种运行时变化
  • 容器中常见情况:镜像里 binary 有 cap,但 runtime(如 runc)默认清空 CapBnd,导致即使 binary 带 cap,进程也拿不到

真正反映“此刻这个进程能干什么”的,只有 /proc/[pid]/status + capsh --decode 这一套组合。其他方法都是间接推断,容易误判。

相关文章

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

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

下载

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

相关专题

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

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

2023.06.21

4430

4

如何安装LINUX
如何安装LINUX

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

2023.06.29

3713

10

linux find
linux find

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

2023.06.30

3013

5

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

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

2023.07.05

7450

7

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

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

2023.07.06

7082

7

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

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

2023.07.20

4033

8

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

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

2023.07.20

3525

4

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

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

2023.07.25

3779

6

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

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

2023.07.31

297

3

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

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

共0课时 | 0人学习