以root用户身份以编程方式运行C程序
问题描述:
我需要在“/ Library/Preferences /”Mac目录下创建一个文件。但在Lion中,只有root用户拥有对此目录的写入权限。以root用户身份以编程方式运行C程序
#include <stdio.h>
int main()
{
FILE *fileHandle = NULL;
fileHandle = fopen("/Library/Preferences/v.test", "w");
fclose(fileHandle);
return 0;
}
这行代码,如果我运行此代码sudo ./a.out
工作。我想以编程方式做同样的事情。
谢谢!
答
我不认为有一种方法可以实现这一点(即不需要在执行之前手动授予某些程序的特殊权限) - 并且没有这种方法是很好的。任何此类方法都将是主要的操作系统安全漏洞。如果你可以写这样一个程序,它具有root权限,任何恶意软件制造商也可以...
答
您可以从C中调用setuid(0)
将您的用户标识更改为根。该计划将需要由root拥有,并设置作为setuid允许:
chown root:root a.out
chmod u+s a.out
答
要求用户以root登陆并启动该程序时,这种特权的工作是必须要做的。
答
不是一件容易的事情,但仍然可行。从Apple搜索SMJobBless示例。一般来说,它设置launchd守护进程,它在由root拥有的launchd实例中运行。
如果你能做到这一点,任何人都可以破坏安全,不是吗? –
为什么你需要这么做 - 为什么不在每个用户运行时为每个用户设置首选项 - 所以不需要管理员权限 – Mark
如果你的程序从输入中读取root密码,这是可能的。但是这种方式和'sudo。/ a.out'没有区别。 – Stan