linux – fork和execve继承非特权父进程的能力

前端之家收集整理的这篇文章主要介绍了linux – fork和execve继承非特权父进程的能力前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Linux系统中,无特权的用户启动程序.创建的进程具有CAP_NET_RAW,CAP_NET_ADMIN功能,模式有效,允许,可继承.
然后,此进程通过调用fork和execv来调用另一个程序udhcpc来创建子进程,但子进程不会按预期继承CAP_NET_RAW,CAP_NET_ADMIN功能.即使在设置功能之前,我也称为prctl(PR_SET_KEEPCAPS,1).

关于如何在fork后跟execve继承非特权父进程的能力的任何建议?

解决方法

在execve()上,检查正在执行的文件(在本例中为udhcpc)的文件功能集,并与线程的功能集合在一起.特别是,文件的Inheritable set与线程的Inheritable set进行AND编辑,以确定新的Permitted集,并且必须设置文件的Effective位,以便从Permitted集复制新的Effective set.

这意味着在您的情况下,您必须使用setcap cap_net_raw,cap_net_admin = ei / path / to / udhcpc来获得所需的效果(除了在父进程中设置功能之外 – 不需要prctl()).

猜你在找的Linux相关文章