2010-03-25 12 views
3

我在寫一個簡單的包管理器,如果程序沒有以root身份運行,我想自動嘗試sudo。我發現一個名爲seteuid的函數,看起來很喜歡它正是我需要的,但我沒有權限運行它。到目前爲止,我所能想到的只是一個bash腳本,在它們到達實際的二進制文件之前進行檢查,但是如果可能的話,我想盡可能使用C++。更改正在運行的程序的有效用戶標識的方法?

是否有任何方法在開始執行後更改進程的euid?或者調用sudo的方法?

回答

2

由於bmargulies在his answer說,你可以如果二進制文件屬於root用戶做到這一點,有setuid位 - 但你將需要實現認證部分(檢查用戶實際上是讓其成爲根)你自己也是。

你會被重寫基本上你sudo應用程序中 - 來處理,這是做什麼你認爲你自己,並安裝與使用/usr/bin/id來檢查它是否是根一個包裝腳本您的應用程序的最佳方式,如果沒有,致電sudo(或su)。

3

下面是這些功能的工作原理。

如果一個程序有setuid位,它將作爲它的所有者執行。一旦它正在執行,它可以調用seteuid作爲原始用戶而不是其所有者運行。 Ditty爲setgid。

原則是最小特權的原則。如果我編寫一個需要特殊訪問的程序,我希望儘可能少的代碼來運行訪問。因此,我安裝了setuid,但是它首先會將特權還給需要它們的窄窗口代碼。

你不能調用sudo(當然除了通過fork/exec)。你可以一個像sudo這樣安裝了setuid的程序,它決定何時適當地使用這個超棒的電源。

相關問題