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()).

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...