![getpcaps 无法在 ubuntu 20.04 和 linux 5.11.0-38-generic 中工作](https://linux22.com/image/198156/getpcaps%20%E6%97%A0%E6%B3%95%E5%9C%A8%20ubuntu%2020.04%20%E5%92%8C%20linux%205.11.0-38-generic%20%E4%B8%AD%E5%B7%A5%E4%BD%9C.png)
我在 StackOverflow 上看到https://stackoverflow.com/a/64000118/8507296使用命令检查进程的能力
getpcaps <pid>
ps命令的输出
$ ps
PID TTY TIME CMD
9618 pts/0 00:00:02 zsh
12797 pts/0 00:00:00 bash
12920 pts/0 00:00:00 ps
获取pcaps
$ getpcaps 9618
9618: =
系统信息
$ uname -a
Linux Vostro-5568 5.11.0-38-generic
#42~20.04.1-Ubuntu SMP Tue Sep 28 20:41:07 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
其他
但在同一个答案中,还有另一种方法对我有用,如下所示
$ cat /proc/<PID>/status | grep Cap
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
$ capsh --decode=000001ffffffffff
WARNING: libcap needs an update (cap=40 should have a name).
0x000001ffffffffff=cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,
cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,
cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,
cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,
cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,
cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,
cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,
cap_audit_read,38,39,40
答案1
您在该状态文件中查看的非零值是边界设置(这是实际能力的上限)。边界集用于限制进程可能具有的功能。该非零值是系统的默认值。因此,它不是一个有趣的值。它的意思是,这些都是正在运行的系统已知的功能。其值变为有趣的当它从默认值更改时。
有大量与Cap*
该状态文件中的各个条目相关的增量历史记录。只是CapInh
、CapPrm
和CapEff
一开始就存在(~1999?)。引入它们是为了实现 POSIX.1e(规范草案,请参阅本页底部,获取该草稿最后已知副本的链接)。libcap
提供该程序的库最初getpcaps
是作为该规范中描述的功能的用户空间 API 的实现而开发的。文本表示为能力该规范仅包含这三个功能旗帜。
根据规范, 、CapInh
和CapPrm
是CapEff
进程的实际功能,并且只有CapPrm
和CapEff
实际上赋予进程一些直接特权。
后来,CapBnd
创建了一个每个进程的边界集,进程只能从中删除位(最近修复了模用户命名空间容器错误)。之后,CapAmb
添加了。这两个向量的语义是它们是天真地可继承 - 子级在 时继承其父级的精确副本exec*()
。这与CapPrm
and的语义有很大不同CapEff
。
当我们考虑这些语义和文本表示的遗留(约 20 年)时,为了支持 A 和 B 概念,我们为 3 元组创建了不同的文本表示:I、A 和 B:IAB 元组。您可以在cap_iab
手册页或文档pam_cap.so
。 IAB 文本格式用于pam_cap.so
其配置语法。 B 实际上表示为逆强调CapBnd
默认值是一个无趣的零值。对所有这些机制进行了更长的讨论,重点是这里的能力继承。
您可能想尝试的示例(出于比较目的):
$ getpcaps 1
这个会有很多能力...=ep
。您可以阅读更多有关所有功能如何运作的信息这libcap
。更新的版本getpcaps
支持--iab
命令行选项,如果它找到一个有趣的(非默认 IAB 值)它附加进程的文本输出[..IAB..]
。发行说明称此支持是在libcap-2.54
.
我不确定libcap
您安装的是哪个版本,但在撰写本文时libcap-2.60
是当前版本。它知道您所看到的所有未命名功能:编号为 38,39 和 40。事实上, Evenlibcap-2.60
的版本capsh
支持以下内容:
$ capsh --explain=40
cap_checkpoint_restore (40) [/proc/self/status:CapXXX: 0x0000010000000000]
Allows a process to perform checkpoint
and restore operations. Also permits
explicit PID control via clone3() and
also writing to ns_last_pid.