如何在不使用system()的情况下从C程序中使用“sudo”?

时间:2012-05-14 09:38:04

标签: c system sudo chmod

我有以下代码:

std::string cmd = "sudo chmod a+x file";
int r = system(cmd.c_str());

正常工作。

如果不调用system()函数,我怎么能做同样的事情?

我能得到的是:

#include <sys/stat.h>
int r = chmod("file", S_IXUSR | S_IXGRP | S_IXOTH);

在这种情况下如何使用“sudo”?

谢谢。

2 个答案:

答案 0 :(得分:3)

你做不到。除非您的程序是suid root,否则很可能不是这样 - 否则你就不会使用sudo。

但是,根据你的程序做什么,给它setuid-root可能确实是要走的路。您需要执行需要root权限的操作,并且对chmod的sudo访问权限,特别是在任意模式/路径上,通常不会授予非root用户。

答案 1 :(得分:1)

权限基于流程。处理此问题的一种方法是使您的程序设置setuid位并由root拥有。启动后,执行您需要权限的任何操作,然后使用setuid系统调用删除特权状态。