3

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

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

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

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

4

1 回答 1

4

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

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

于 2009-09-14T17:22:09.340 回答