【问题标题】:How to use "sudo" from a C program without using system()?如何在不使用 system() 的情况下从 C 程序中使用“sudo”?
【发布时间】:2012-05-21 18:54:33
【问题描述】:

我有以下代码:

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”?

谢谢。

【问题讨论】:

  • 您有什么不想使用系统的具体原因吗?
  • 主要是出于效率原因。但是,不处于循环中,无论如何这不是一个大问题。

标签: c system sudo chmod


【解决方案1】:

你不能。除非您的程序是 suid root,否则很可能不是这种情况 - 否则您不会使用 sudo。

但是,根据您的程序的功能,给它 setuid-root 可能确实是要走的路。您需要执行需要 root 权限和 sudo 访问 chmod 的操作,尤其是在任意模式/路径上,通常不会授予非 root 用户。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多