如何以无人的方式运行程序?

时间:2008-09-15 20:55:36

标签: c linux security ubuntu

我希望用户特权(非root)进程以用户nobody启动新进程。我已尝试直接拨打setuid,但EPERM上的Ubuntu 8.04失败:

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

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

我应该怎么做呢?

5 个答案:

答案 0 :(得分:16)

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

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

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

如果您创建一个只需exec("/home/you/bin/your-application")的小帮助程序可执行文件,这对脚本也有效。这个可执行文件可以是suid-nobody(见上文),你可以自由修改your-application

答案 1 :(得分:1)

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

答案 2 :(得分:0)

califesudo的替代方案。

  

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

答案 3 :(得分:0)

'nobody'用户仍然是用户。我不确定你的程序是什么,让程序作为无人运行,它不会添加任何额外的安全性。你更有可能对其他问题敞开心扉。

我会按照squadette的建议使用辅助应用程序。

答案 4 :(得分:0)

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