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