2012-05-14 50 views
0

我有以下代碼:如何在不使用system()的情況下從C程序中使用「sudo」?

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); 

我怎麼能在這種情況下使用「命令」?

謝謝。

+2

你不想使用系統的具體原因是什麼? –

+0

基本上爲了效率的原因。但是,不要陷入循環,反正它不是一個大問題。 – Pietro

回答

3

你不能。除非你的程序是suid root,這很可能不是這種情況 - 否則你不會使用sudo。

但是,根據你的程序的不同,給它setuid-root可能確實是一條路。您需要執行需要root權限和sudo權限的操作,尤其是在任意模式/路徑下,通常不會授予非root用戶。

1

權限基於過程。處理這種情況的一種方法是讓你的程序擁有setuid位並由root擁有。啓動後,請執行您所需的任何需要權限的操作,然後使用系統調用setuid來刪除特權狀態。

相關問題