不幸的是,我不知道一种干净地做您想做的事情的方法。我认为您最好的选择是使程序setuid(或在sudo下运行),然后执行您的肮脏工作并删除权限,或者从一个进程中删除fork()并删除权限,并保留另一个进程来进行根工作。
您正在寻找的是setuid(2)/ setreuid(2)/ setregid(2)/
setgroups(2)调用,但是它们都是硬接线的,不允许您在调用时获得特权。据我所知,您只能使用它们来“放弃”特权。

不幸的是,我不知道一种干净地做您想做的事情的方法。我认为您最好的选择是使程序setuid(或在sudo下运行),然后执行您的肮脏工作并删除权限,或者从一个进程中删除fork()并删除权限,并保留另一个进程来进行根工作。
您正在寻找的是setuid(2)/ setreuid(2)/ setregid(2)/
setgroups(2)调用,但是它们都是硬接线的,不允许您在调用时获得特权。据我所知,您只能使用它们来“放弃”特权。