我希望一个用户特权(不是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 nobody
和chmod +s
,您将能够直接执行它。每次可执行文件更改时,都必须重复执行此任务。
如果您将创建一个仅执行exec("/home/you/bin/your-application")
的微型帮助程序可执行文件,这也可能适用于脚本。可以使该可执行文件为suid-nobody(请参见上文),并且您可以自由地修改your-application
。