C++ 更改正在运行的程序的有效用户id的方法?

C++ 更改正在运行的程序的有效用户id的方法?,c++,linux,C++,Linux,我正在编写一个简单的包管理器,如果程序不是以root用户身份运行,我想自动尝试sudo。我发现了一个名为的函数,它看起来正是我所需要的,但我没有运行它的权限。到目前为止,我所能想到的是一个BASH脚本在实际二进制之前进行检查,但如果可能的话,我想把它们都做为C++。 是否有任何方法可以在进程开始执行后更改其euid?或者调用sudo的方法?以下是这些函数的工作原理 如果程序具有setuid位,它将作为其所有者执行。一旦执行,它就可以调用seteuid作为原始用户而不是所有者运行。塞吉德小曲 原则

我正在编写一个简单的包管理器,如果程序不是以root用户身份运行,我想自动尝试sudo。我发现了一个名为的函数,它看起来正是我所需要的,但我没有运行它的权限。到目前为止,我所能想到的是一个BASH脚本在实际二进制之前进行检查,但如果可能的话,我想把它们都做为C++。
是否有任何方法可以在进程开始执行后更改其euid?或者调用sudo的方法?

以下是这些函数的工作原理

如果程序具有setuid位,它将作为其所有者执行。一旦执行,它就可以调用seteuid作为原始用户而不是所有者运行。塞吉德小曲

原则是最小特权原则。若我编写了一个需要特殊访问权限的程序,那个么我希望尽可能少的代码可以通过访问权限运行。因此,我安装了setuid,但它做的第一件事就是在需要特权的狭窄代码窗口之前将其返回

您不能调用sudo(当然,通过fork/exec除外)。你可以是一个像sudo这样的程序,它安装了setuid,并决定何时适当地使用这种强大的功能。

正如bmarglies在中所说,如果你的二进制文件是root所有的,并且设置了setuid位,那么你可以这样做,但是你需要实现身份验证部分(检查用户是否确实被允许成为root)你自己也是

实际上,您需要在应用程序中重写
sudo
——处理此问题的最佳方法是按照您自己的建议执行,并使用包装器脚本安装应用程序,该脚本使用
/usr/bin/id
检查它是否为root,如果不是,则调用
sudo
(或
su