我希望一个用户特权(不是root)的进程以nobody用户身份启动新进程。我尝试了直接调用setuid,但在EPERM上失败了-1 Ubuntu 8.04:

#include <sys/types.h>
#include <unistd.h>

int main() {
       setuid(65534);
       while (1);
       return 0;
}

我应该怎么做呢?

最佳答案

您将需要系统管理员的帮助和信任。普通用户不能代表其他用户运行自己选择的可执行文件。

她可以使用适当的设置将您的应用程序添加到/etc/sudoers中,您将能够像sudo -u nobody一样运行它。这将同时适用于脚本和二进制可执行文件。

另一个选择是,她将在您的二进制可执行文件上执行chown nobodychmod +s,您将能够直接执行它。每次可执行文件更改时,都必须重复执行此任务。

如果您将创建一个仅执行exec("/home/you/bin/your-application")的微型帮助程序可执行文件,这也可能适用于脚本。可以使该可执行文件为suid-nobody(请参见上文),并且您可以自由地修改your-application

10-05 21:04