2014-04-04 80 views
0

我寫了一個文件管理器,現在我想讓用戶輸入密碼,如果他想複製或編輯需要sudo的文件。我可以用gksudosudo開始一個程序的新副本,並隱藏當前副本。但是在同一個過程中可以做到嗎?如何在程序中暫停sudo?

我讀過geteuid和其他一些函數,但我覺得我缺乏一些基本的理解,因爲人對我沒有多大意義。

回答

0

爲了執行純根操作,進程必須以有效的uid開頭,或者具有允許它模擬這種euid(CAP_SETUID)的功能。

有效UID是使用特殊的文件系統屬性設置,所謂的「setuid的」標誌:

# ls -l /bin/su 
-rws--x--x 1 root root 36720 Mar 28 2013 /bin/su 

記下的「在文件權限標誌。

上面的意思是,當任何用戶運行su命令時,它將代表可執行文件的所有者運行,在本例中爲root(所以該進程將使用普通用戶標識運行,但有效的用戶標識將是root用戶)。因此,這樣的過程將能夠做到任何事情root可以。

另一種更現代的方法是給過程選擇功能,如CAP_SETUID。這些可以使用命令設置和查詢,並允許更細粒度地控制過程可以做什麼和不可以做什麼。這是否會導致更安全的系統,仍然是一個懸而未決的問題。

https://wiki.archlinux.org/index.php/Using_File_Capabilities_Instead_Of_Setuid

可能出現的安全問題整潔概述:

http://forums.grsecurity.net/viewtopic.php?f=7&t=2522&sid=c6fbcf62fd5d3472562540a7e608ce4e#p10271