getpcaps 无法在 ubuntu 20.04 和 linux 5.11.0-38-generic 中工作

getpcaps 无法在 ubuntu 20.04 和 linux 5.11.0-38-generic 中工作

我在 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*该状态文件中的各个条目相关的增量历史记录。只是CapInhCapPrmCapEff一开始就存在(~1999?)。引入它们是为了实现 POSIX.1e(规范草案,请参阅本页底部,获取该草稿最后已知副本的链接)。libcap提供该程序的库最初getpcaps是作为该规范中描述的功能的用户空间 API 的实现而开发的。文本表示为能力该规范仅包含这三个功能旗帜

根据规范, 、CapInhCapPrmCapEff进程的实际功能,并且只有CapPrmCapEff实际上赋予进程一些直接特权。

后来,CapBnd创建了一个每个进程的边界集,进程只能从中删除位(最近修复了模用户命名空间容器错误)。之后,CapAmb添加了。这两个向量的语义是它们是天真地可继承 - 子级在 时继承其父级的精确副本exec*()。这与CapPrmand的语义有很大不同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.

相关内容