仅在可继承集中具有功能意味着什么?

时间:2017-05-12 00:52:52

标签: c linux linux-capabilities

我的程序正在使用cap_sys_admin,cap_setgid+i运行 当然,我知道它们可以在execve中继承,但除此之外:它们的行为方式是否与我根本没有它们一样,因为它们既不有效也不允许?

2 个答案:

答案 0 :(得分:1)

好的,所以你的进程正在运行一些可继承的功能。这对您的流程意味着什么?几乎没有。您无法调用setcap()使这些功能生效,因为它们不在您的允许集中,并且无法将它们置于您的有效集中,您的流程无法使用这些功能。

但是,它们在您的可继承集中的存在可能会对您启动的其他进程产生影响。例如。如果您要exec()其文件在其有效和可继承集合中具有cap_setgid的二进制文件,则该子进程将在其有效集中以cap_setgid开头。

如果上一个示例中您的进程的可继承集中cap_setgid ,那么该文件具有cap_setgid+ie的事实将变得无关紧要,并且子进程将 具有所述的能力。

答案 1 :(得分:0)

是的,继承会一直保持睡眠状态,直到您设置有效功能。如手册中所述,继承意味着:“当execve,复制继承给子继承和允许”:

This is a set of capabilities preserved across an execve(2).  Inheritable capa‐
bilities remain inheritable when executing any program, and  inheritable  capa‐
bilities  are  added to the permitted set when executing a program that has the
corresponding bits set in the file inheritable set.

http://man7.org/linux/man-pages/man7/capabilities.7.html