正在运行的进程需要特权指令,例如使用SO_RCVBUFFORCE套接字选项。此过程作为普通用户进程运行。
如何为此流程提供功能/权限?基于文件的功能设置仍然是一个梦想?
我已经尝试过libcap包和/usr/sbin/setpcaps
api中的cap_set_proc()
实用程序,但CAP_SETPCAP
功能在系统上被阻止(基于带有2.6.20内核的Fedora 4的遗留系统),所以它不能授予/删除不同的功能 - 然后是自我过程。
考虑将临时root uid设置为该进程,但有没有办法更改已经运行的外部进程的有效UID? setuid()
/ seteuid()
/ ...函数只能修改当前进程(谁正在调用该函数)。
你不能。功能背后的安全模型(相反,“允许的功能集”)是它们可以被进程删除,从不添加。
如果您无法在体系结构中进行设置,以便从进程的父进程中正确继承功能,则可以尝试使用文件描述符传递在单独的进程中执行setsocktopt()调用。也就是说,设置一个在所需权限级别运行的“sockopt守护进程”,使用新套接字连接到它,使用sendmsg()传递文件描述符,并让它进行必要的调用。这是一个丑陋的API,解决方案是不必要的复杂。但是,重新架构应用程序的启动和初始化结构可能更为可取。