2010-07-20 42 views
0

我擁有的:UNIX用戶(愛麗絲)的登錄名/密碼。UNIX的等價物CreateProcessWithLogonW

我是誰:其他一些UNIX用戶(bob)。

我需要做的是:作爲其他用戶(愛麗絲)以編程方式啓動進程(foo)。

最終結果應該是什麼:如果完成了「ps」,則進程正在運行並顯示alice作爲所有者。爲了特權的目的,就好像愛麗絲開始它一樣。

基本上我需要編寫一些代碼,做的「蘇-c‘富’ - 愛麗絲相當於」

理想我不想設置任何特殊位或權限上有問題的可執行文件(富)。

回答

1

我看到只有兩種可能性在UNIX/Linux上從bob擁有的進程中啓動一個進程,使其不能setuid本身。

  • 調用setuid程序
  • 與一個已經運行的進程進行通信,可以切勿啓動過程愛麗絲
+0

+1:注意在第二種情況下,該過程必須已經以愛麗絲或根的方式運行。第三種可能是maaaaaaaybe fork和exec'login',但是因爲_really_想和終端通話,所以我懷疑這會很快變得非常混亂。 – 2010-07-20 21:06:57

1

說永遠,但我覺得這恐怕是不可能在任何UNIX移植的方式。 setuid(2)調用(和朋友)只有在當前uid與目標uid相同(模仿有效和真實uid的一些細微差別)或當前uid爲0(即root)時纔會成功。也就是說,您不能從一個非root用戶更改爲另一個。

擁有密碼並沒有幫助。該密碼用於初始對系統的身份驗證,無論是通過login,ssh還是某些GUI登錄對話框,但密碼僅由這些程序單獨關注,而不是系統本身。換句話說,內核並不關心你的密碼,而是內核,如果你想改變你的uid,你必須與之交談。

也就是說,您可能因此有必要考慮間接路線,例如Peter G提到的路線。

(是的,一些unix可能有這樣做的方法,但這是平臺特定的)。

我知道我沒有在這裏增加任何積極的建議,只有可能省時的負面建議'沒什麼在這裏看到;向右移動...'