2011-08-24 181 views
0

我需要在“/ 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工作。我想以编程方式做同样的事情。

谢谢!

+2

如果你能做到这一点,任何人都可以破坏安全,不是吗? –

+0

为什么你需要这么做 - 为什么不在每个用户运行时为每个用户设置首选项 - 所以不需要管理员权限 – Mark

+0

如果你的程序从输入中读取root密码,这是可能的。但是这种方式和'sudo。/ a.out'没有区别。 – Stan

回答

1

我不认为有一种方法可以实现这一点(即不需要在执行之前手动授予某些程序的特殊权限) - 并且没有这种方法是很好的。任何此类方法都将是主要的操作系统安全漏洞。如果你可以写这样一个程序,它具有root权限,任何恶意软件制造商也可以...

3

你可以设置可执行文件为setuid吗?只需chown它到rootchmod u+s

+0

和你需要做什么权限? – duedl0r

+0

'root'。这很清楚。但这是一次“做一次”的行动,没有任何事情需要持续进行。 – glglgl

1

您可以从C中调用setuid(0)将您的用户标识更改为根。该计划将需要由root拥有,并设置作为setuid允许:

chown root:root a.out 
chmod u+s a.out 
0

要求用户以root登陆并启动该程序时,这种特权的工作是必须要做的。

0

不是一件容易的事情,但仍然可行。从Apple搜索SMJobBless示例。一般来说,它设置launchd守护进程,它在由root拥有的launchd实例中运行。

相关问题