我想要一个用户特权(非 root)进程以用户身份启动新进程 nobody. 。我试过直接打电话 setuid 失败并返回-1 EPERMUbuntu 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.

其他提示

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

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

我会遵循小队的建议,使用辅助应用程序。

calife 是一个替代方案 sudo.

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

我跑过 setuid-沙箱 今天在阅读 LWN 时进行项目,它满足了我正在寻找的正确方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top