2011-08-24 189 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實例中運行。

相關問題