【发布时间】:2011-05-27 15:28:07
【问题描述】:
在 Linux 系统中,非特权用户启动程序。创建的进程具有CAP_NET_RAW,CAP_NET_ADMIN 的功能,其模式为effective,permitted,inheritable。
该进程然后通过调用fork 和execv 来调用另一个程序udhcpc 来创建一个子进程,但是子进程没有像预期的那样继承CAP_NET_RAW,CAP_NET_ADMIN 的能力。即使在设置功能之前我已经调用了prctl(PR_SET_KEEPCAPS, 1)。
关于如何在fork 后跟execve 继承非特权父进程的能力有什么建议吗?
【问题讨论】:
-
目前似乎不可能在不设置文件功能的情况下在 execve 之后保留功能。见[RFC] Capabilities still can't be inherited by normal programs
-
Fork 可以通过,exec 不能(环境除外)。 exec可以通过继承,但是被执行的文件也需要这个继承集。