向正在运行的进程授予能力

CsT*_*mas 4 linux permissions privileged-functions linux-capabilities

已经运行的进程需要特权指令,例如使用 SO_RCVBUFFORCE 套接字选项。该进程作为普通用户进程运行。

如何赋予这个过程能力/权限?基于文件的功能设置仍然是一个梦想吗?

我已经尝试了/usr/sbin/setpcapslibcap 包和cap_set_proc()api 中的实用程序,但该CAP_SETPCAP功能在系统上被阻止(基于 Fedora 4 和 2.6.20 内核的遗留系统),因此它无法为不同的自我授予/删除功能过程。

考虑过为该进程设置临时 root uid,但是有没有办法更改外部已运行进程的有效 UID?setuid()// ...函数seteuid()只能修改当前进程(谁在调用该函数)。

And*_*oss 5

你不能。功能(更确切地说,“允许的功能集”)背后的安全模型是它们可以被进程删除,而永远不会添加。

如果您无法在体系结构中进行设置,以便从进程的父进程正确继承功能,您可以尝试使用文件描述符传递在单独的进程中执行setsocktopt()调用。也就是说,设置一个在所需权限级别运行的“sockopt 守护进程”,使用新套接字连接到它,使用 sendmsg() 传递文件描述符,并让它执行必要的调用。这是一个丑陋的 API,而且解决方案也不必要地复杂。但这可能比重新构建应用程序的启动和初始化结构更好。