“ep”功能是什么意思?

Jam*_*mes 10 linux capabilities

root@macine:~# getcap ./some_bin
./some_bin =ep
Run Code Online (Sandbox Code Playgroud)

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

mos*_*svy 12

# getcap ./some_bin
./some_bin =ep
Run Code Online (Sandbox Code Playgroud)

该二进制文件从一开始就具有允许 ( 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
Run Code Online (Sandbox Code Playgroud)

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

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


ctr*_*lor 9

它不是一种能力。

它意味着有效设置和允许设置。

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

e用于传统程序(在当前时间可能大多数程序),那就是不知道功能的程序,因此无法将其-自我复制能力,从允许到有效的。

至于为什么有什么看起来像和空集(正如@mosvy 所指出的),图书馆的作者把所有的都与没有混淆(无穷大和零是两个最容易混淆的数字)。