2010-03-08 71 views
10

我有一個Linux應用程序(使用GTK),需要以root用戶身份運行(它讀取和寫入/ dev/sd *)。認證GTK應用程序以root權限運行

,而不需要用戶打開一個root shell,或當他啓動我的應用程序中使用「命令」手動每一次的,我不知道是否該應用程序可以使用一些操作系統提供的API來獲得root權限。 (注意:gtk應用程序不能使用「setuid」模式,所以這不是一個選項。)

這裏的優勢是更簡單的工作流程:用戶可以從他的默認用戶帳戶雙擊我的應用程序桌面,而不必打開根終端並從那裏啓動它。

我問這個問題是因爲OS X提供了這個:一個應用程序可以要求操作系統啓動一個帶有根權限的可執行文件 - 操作系統(而不是應用程序)然後要求用戶輸入他的憑證,驗證它們然後啓動目標根據需要。

我不知道是否有類似的針對Linux(Ubuntu的,如)東西

澄清:

所以,在PolicyKit的提示我不知道如果我可以用它來獲得R/W後訪問「/ dev/sd ...」塊設備。我發現這些文檔很難理解,所以我想我會先花一點時間試着去理解它,然後再問這是否可能。

更新:

該應用程序是爲unsavvy的Linux用戶遠程操作的磁盤修復工具,以及那些Linux的菜鳥不會有使用sudo,甚至改變他們的用戶的組成員太多瞭解,特別是如果他們的磁盤剛剛開始動作,他們就會嚇壞了。這就是爲什麼我尋求避免這種技術問題的解決方案。

+0

確實有可能像這樣設置 - 例如,新立得軟件包管理器通常是這樣設置的。 – caf 2010-03-08 12:11:17

+0

我不確定你應該真的想以root身份運行。如果您只需要訪問磁盤,最好將用戶添加到「磁盤」組。 – 2010-03-08 23:25:40

+0

米蘭 - 我的應用程序充當一次性磁盤修復工具。我不認爲任何想使用它的人都願意永久性地改變他的系統範圍的設置。 – 2010-03-08 23:30:23

回答

3

舊的方式,簡單,但現在被淘汰,是GKSuHere是關於GKSU未來的討論。

新的方法是使用PolicyKit。我不太確定這是如何工作的,但我認爲您需要使用pkexec命令啓動您的應用程序。

UPDATE:

綜觀上http://hal.freedesktop.org/docs/polkit/polkit-apps.html示例代碼,似乎可以用PolicyKit的獲得授權某些行動這是由.policy文件/usr/share/polkit-1/actions描述。作爲另一用戶執行程序的動作是org.freedesktop.policykit.exec。我似乎無法找到直接訪問塊設備的操作,但我必須承認,PolicyKit文檔也會打亂我的大腦。

因此,對於您來說,最簡單的做法可能是將需要權限的磁盤碎片代碼分離到命令行實用程序中,然後使用g_spawn_[a]sync()pkexec從GUI應用程序運行該程序。這樣你就不必費心去請求行動和類似的事情。無論如何,以root身份運行整個GUI應用程序可能是不好的做法。

另一個建議是直接詢問PolicyKit(David Zeuthen)的作者。或者嘗試將您的問題發佈到gtk-app-devel列表中。

+0

我試過pkexec - 不幸的是,它在我的情況下不起作用,因爲我收到以下錯誤消息:「Gtk-Warning **:無法打開顯示:」 - 「man pkexec」解釋了原因: 「PROGRAM將運行它的環境將被設置爲已知和安全的最小環境,以避免通過 LD_LIBRARY_PATH或類似機制注入代碼。另外,將PKEXEC_UID 環境變量設置爲調用 pkexec的進程的用戶標識。因此,pkexec不允許您運行例如X11 作爲另一個用戶的應用程序,因爲$ DISPLAY環境變量是 未設置。「 Darn。 – 2010-03-08 23:19:05

+1

嗯,我認爲PolicyKit API可以讓你實現同樣的事情,但是在你的程序中。雖然我不確定。 – ptomato 2010-03-09 09:08:27

+0

因爲沒有寄給我關於你的更新,所以我現在只看到它。感謝您付出額外的努力,我認爲我可以提前獲得這些信息。 – 2010-03-17 18:09:31

相關問題