13

我想要一个用户特权(不是 root)进程以 user 身份启动新进程nobody。我已经尝试直接调用setuid失败,并且 -1 EPERMon Ubuntu 8.04

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

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

我应该怎么做呢?

4

5 回答 5

18

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

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

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

如果您将创建一个简单的帮助程序可执行文件,这也适用于脚本exec("/home/you/bin/your-application")。可以将此可执行文件设置为 suid-nobody(见上文),您可以自由修改your-application.

于 2008-09-15T21:02:26.190 回答
1

据我所知,除非您是 root 或设置了 sudo 以允许您切换用户,否则您不能。或者,您可以让您的可执行文件在其上设置 suid 位,并让任何人拥有它。但这也需要root访问权限。

于 2008-09-15T20:57:34.313 回答
0

calife是 的替代品sudo

Calife 是一个小程序,它使 UNIX 系统管理员能够在他/她的机器上成为 root(或其他用户),而无需提供他/她自己的 root 密码。

于 2008-09-15T21:15:52.740 回答
0

“nobody”用户仍然是用户。我不确定您让程序以无人身份运行的理由是什么,它不会增加任何额外的安全性。你更有可能对其他问题敞开心扉。

我会按照小队的建议使用帮助应用程序。

于 2008-09-15T21:21:08.780 回答
0

我今天在阅读 LWN 时遇到了setuid-sandbox项目,它可以满足我正在寻找的正确方法。

于 2013-02-15T01:38:34.717 回答