2009-12-17 36 views
1

我正在創建一個應該在Linux上運行的圖形安裝程序。安裝應該包括將文件複製到/usr中的某些地方。目前安裝程序是用Python編寫的。以編程方式在Linux上升級特權

當我需要複製文件時,如何升級安裝程序的權限?我看着PolicyKit

  • 一)似乎沒有成爲一個通用的「安裝文件」動作id爲PolicyKit的
  • b)該行動的ID,我可以使用,我不認爲他們在發行版中是標準的

我也看了一下PAM,我有使用libpam的代碼,但我似乎無法用它做任何事情。驗證用戶身份(通過提供用戶名和密碼)後,我沒有對/usr的寫入訪問權限。我嘗試更改我的用戶os.setuid(0)認證後,但我從操作系統得到一個錯誤。

此外,奇怪的是,我提供給pam_start的服務似乎並不重要。只要用戶名和密碼正確,我就可以通過我想要的任何東西。我看到我有/etc/pam.d/sudo。下面的代碼被簡化了,密碼被正確地存儲在一個pam_conversation對象中,我確實傳遞了一個句柄對象。

pam_start("my_user", "my_pass", "sudo_garbage_12345"); 

作品一樣好

pam_start("my_user", "my_pass", "sudo"); 

也就是說,他們都成功。

作爲最後的手段,我可​​以執行gksudokdesudo但我不希望被綁定到這些程序。要求用戶用sudo調用我的安裝程序是(非常)最後的手段。

+2

所以,讓我直接得到這個...你想能夠給任何用戶無限制(根)訪問權限? – davethegr8 2009-12-17 21:39:22

+1

我想通過允許用戶輸入密碼來模擬sudo。如果用戶無法通過使用sudo獲得權限,則他們也不能使用我的安裝程序執行此操作。我只是想給他們一個noob友好的方式來使用sudo。 – jonr 2009-12-17 21:59:43

回答

9

您可能會更好地將RPM包裝在一個帶有用戶選項並調用RPM來完成艱苦工作的前端。這也爲您提供了用於管理依賴關係的基礎架構,並與現有的包管理系統完美搭配。如果您需要運行基於.deb的系統(Debian或Ubuntu),您可能還需要構建一個.deb並在前端放置一些機制來確定哪個軟件包管理系統處於活動狀態。

授予隨機用戶對root權限的訪問權限通常在Linux或Unix系統(或任何多用戶系統)上被視爲不良形式,因爲這是一個重大的安全風險。但是,如果用戶沒有root訪問權限或sudo權限允許他們寫入系統區域,您可以選擇讓用戶將其安裝在主目錄(~/bin)下。在這種情況下,如果他們想要安裝在/ usr/bin中,但允許他們將其安裝在主目錄下供他們自己使用(如果他們沒有root權限),則可以要求他們以root用戶身份進行安裝。

+0

+1:同意100%。 – jldupont 2009-12-17 21:43:19

-1

在這種情況下,最好的方法是在程序中使用su。重定向輸入/輸出,你很好去!

+0

您能否在「輸入/輸出」中提供更多信息? – 2010-06-30 09:18:23

2

對於圖形安裝程序,請堅持使用圖形環境。如果可用,請使用gksudo或kdesudo,否則將失敗,並顯示錯誤對話框,說明它們需要root用戶。人們(特別是新手)將下載您的安裝程序並雙擊以從桌面啓動它,並且您需要圖形方式來詢問他們的密碼。你不想打開他們的終端。

鑑於此,即使他們從終端運行,也不要爲他們做sudo。只是輸出一個錯誤,說你需要root並退出。如果用戶已經在命令提示符下(就像我最可能的那樣),如果我想這樣做,我已經知道如何sudo或將自己變爲root。我向你保證,如果你試圖讓一個有經驗的用戶root成爲他們自己可以做的事情,你很可能會弄出一些羽毛。

如果您在安裝程序中親自做了一個sudo,爲了上帝的緣故,請在刪除之前的時間戳之前強制使用'sudo -K'。如果你不這樣做,而且我最近做了sudo,那麼你會在我不知情的情況下以root身份運行你的安裝程序(因爲我不期望發生這種情況)。 'sudo -K'會強制提示我可以決定是否要以root身份進行操作。

相關問題