“ep”能力是什么意思?

“ep”能力是什么意思?
root@macine:~# getcap ./some_bin
./some_bin =ep

“ep”是什么意思?这个二进制文件有哪些功能?

答案1

# getcap ./some_bin
./some_bin =ep

该二进制文件从一开始就具有所有允许的 ( p) 和有效的 ( )功能。e

在能力的文本表示中,前导=相当于all=。从cap_to_text(3)联机帮助页:

在主导运算符为=且未提供功能列表的情况下,假定操作列表指的是全部能力。例如,以下三个子句彼此等效(并且指示完全空的能力集)all==; cap_chown,<every-other-capability>=

这样的二进制文件可以做任何它想做的事情,仅受功能边界集的限制,在典型的桌面系统上,它包括所有内容(否则 setuid 二进制文件将su无法按预期工作)。

请注意,这只是使用的文本表示的“陷阱” libcap:在将打印的security.capability文件的扩展属性中,所有有意义的位都是有效的getcap/file/path =ep;为空的 security.capability, /file/path =(后面=不跟任何内容)将被打印。


如果有人仍然不相信,这里有一个小实验:

# cp /bin/ping /tmp/ping   # will wipe setuid bits and extented attributes
# su user -c '/tmp/ping localhost'
ping: socket: Operation not permitted
# setcap =ep /tmp/ping
# su user -c '/tmp/ping localhost'  # will work because of cap_net_raw
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.073 ms
^C
# setcap = /tmp/ping
# su user -c '/tmp/ping localhost'
ping: socket: Operation not permitted

请注意,空的文件功能也不同于已删除能力 ( capset -r /file/path),空的文件功能将阻止文件执行时继承 Ambient 集。

文件能力的一个微妙之处=ep在于,如果边界集不是完整的,那么内核将阻止=ep其上的程序执行(如《能力哑二进制文件的安全检查》部分所述)capabilities(7)联机帮助页)。

答案2

这不是一种能力。

它意味着有效集和允许集。

这意味着这些能力将被放入允许集(p)中,并且所有允许的能力将被复制到有效集(e)中。

用于e遗留程序(可能是当前的大多数程序),即不了解功能的程序,因此不能自行将功能从允许复制到有效。

至于为什么会有看起来像和空集(正如 @mosvy 指出的那样),该库的作者将 all 与 none 混淆了(无穷大和零是两个最容易混淆的数字)。

相关内容