据我所知,Linux 功能是在进程/文件上定义的。但是当我执行 capsh --print 时,它会告诉我用户的功能。
那么 capsh --print 到底在做什么?能力只定义在流程上,而不定义在用户上?
答案1
capsh
是一个用于探索如何使用和验证功能和 APIlibcap
提供的工具。你可以用它来调试当发生什么各种各样的问题。
的一个重要属性capsh
是它严格按照从左到右的顺序评估其参数。因此,当您试图弄清楚为什么某些事情没有达到您想要的状态时,您可以插入一个--print
参数来弄清楚:--print
只输出正在执行的进程的当前状态capsh
。
您应该将其视为一种与功能相关的功能的瑞士军刀。构建libcap
树将其用于quicktest.sh
验证该库仍然适用于现代内核等。该脚本包含一大堆工作示例以及使用libcap
内核功能的预期结果。
这包括环境功能以及非标准内核操作模式(又名libcap
模式)。
例如,由于内核的工作方式,这两个序列会产生不同的结果:
$ sudo capsh --iab=^cap_dac_override --user=$(whoami) --print
$ sudo capsh --user=$(whoami) --iab=^cap_dac_override --print
您可以自动回答以下问题这是否提高了环境位像这样的东西:
$ sudo capsh --user=$(whoami) --iab=^cap_dac_override --has-a=cap_dac_override && echo yes
另外,如果你想探索世界POSIX.1e草案委员会想象,你可以尝试这样的事情:
$ sudo capsh --mode=PURE1E --user=$(whoami) --
答案2
简单的。这不是用户的能力。这是它自身的能力。所以它从父母那里继承的东西。
我记得(几年前)我们正在讨论capsh
,我们试图弄清楚它的用途。我们认为它几乎毫无用处,讨论导致了环境功能(继承和有效)的发明。capsh
自从环境功能存在以来我就没有尝试过。仅当创建一系列sudo
功能(例如)时才需要它们capsh
。或者有时是更专业的包装。