簡體   English   中英

使用 dbus 和 polkit 運行調用 root 腳本的 root 權限 python 服務

[英]using dbus and polkit to run a root privilege python service that calls a root script

我編寫了一個 python 腳本,它從啟動板下載 deb 文件,然后調用 shell 腳本以使用外星將 deb 轉換為 rpm。

shell 腳本使用了alien,所以它需要以root 身份運行。

該程序使用線程池異步下載 deb 文件,使用 threadpool.apply_async,然后使用處理池異步調用 shell 腳本,因此整個過程發生得相當快。

一切都運行良好,但是調用外星人的 shell 腳本需要是 root 用戶,否則無法正確構建包。 當我第一次完成腳本時,我會在使用 sudo 之后使用 pkexec 調用外星人。 在這兩種情況下,我都遇到了一些問題。

第一個是在 root 中啟動時,我丟失了用戶的環境,因此丟失了 pip 安裝的 python 庫。 我也許可以使用 sudo -s 或類似命令,但第二個問題是我必須為每個構建的包輸入我的 root 密碼。

我想要做的是,以普通用戶身份運行python腳本、qt gui等,選擇要轉換的文件,然后點擊安裝按鈕,只輸入一次我的超級用戶密碼。

我決定過濾掉 python 的安裝部分,包括線程下載和對 shell 腳本的線程調用,然后嘗試以 root/超級用戶身份運行這些部分。

我為此安裝部分創建了一個 dbus 服務,並且在經歷了陡峭的 dbus 學習曲線之后,設法使該服務正常工作。 但是,讓腳本通過身份驗證並提高其權限我並不高興。

我已經能夠使用 polkit 來顯示密碼對話框並授權超級用戶,但我不知道如何使用 polkit 的返回值

`authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)`

它顯示密碼對話框,用於授權,但不處理提升腳本權限。

我已將 python 安裝服務設置為 0500 perms,因此希望一旦我弄清楚如何提升權限,root 用戶就能夠讀取和執行當前在會話總線上創建的服務。

如何提升權限,同時保留用戶的環境變量,這樣我就不必將python模塊安裝到root帳戶中?

非常感謝您提前提供的幫助...

附: 我已經編寫了一個 polkit 操作文件和一個 polkit 規則,但在每種情況下,我都不確定操作 ID 與權限提升有何關聯。 pps。 我可以/應該使用pam嗎?

我最終以 root 身份運行該進程,使用 pkexec 獲取密碼對話框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM