以编程方式以root用户身份运行C程序

时间:2011-08-24 11:21:02

标签: c macos

我需要在“/ Library / Preferences /”Mac目录下创建一个文件。但在Lion中,只有root用户对此目录有写权限。

#include <stdio.h>

int main()
{
    FILE *fileHandle = NULL;
    fileHandle = fopen("/Library/Preferences/v.test", "w");
    fclose(fileHandle);

    return 0;
}

如果我将此代码作为sudo ./a.out运行,则此代码行有效。我想以编程方式做同样的事情。

谢谢!

5 个答案:

答案 0 :(得分:4)

可以将可执行文件设置为setuid吗?只需chownrootchmod u+s

答案 1 :(得分:2)

您可以从C调用setuid(0)将您的用户ID更改为root。该程序需要由root拥有并设置为允许的setuid:

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

答案 2 :(得分:1)

我认为没有办法实现这一目标(即在执行之前没有手动授予程序的某些特殊权利) - 并且没有办法实现。任何此类方法都将成为主要的操作系统安全漏洞。如果您可以编写具有root权限的程序,任何恶意软件制造商都可以......

答案 3 :(得分:0)

要求用户以root用户身份登录,并在完成此类特权工作时启动该程序。

答案 4 :(得分:0)

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