使用圖形 sudo 提示符號停止 systemctl

使用圖形 sudo 提示符號停止 systemctl

我的問題是,當我忘記輸入 sudo 時,如何配置 systemd(?) 來停止打開這個煩人的彈出視窗。只需給我一個基於文字的 sudo 提示或顯示錯誤,這樣我就可以快速糾正錯誤。

這是最新的 Arch Linux(systemd 238.133)。

在此輸入影像描述

答案1

這不是“sudo”提示符,而是“polkit”提示符。避免這種情況的一種方法—全局全部軟體,而不僅僅是 systemctl – 是編寫一個立即拒絕該操作(或立即允許該操作)的 polkit 規則。

polkit.addRule(function(action, subject) {
    if (subject.user !== "root") {
        if (/^org\.freedesktop\.systemd1\./.test(action.id)) {
            return polkit.Result.NO;
        }
    }
});

(該subject.user測試可以省略,因為 root 呼叫的操作完全繞過 polkit 檢查。)

polkit 規則儲存在 中/etc/polkit/rules.d/*.rules,一般命名為80-custom.rules(按升序處理)。欲了解更多信息,請參閱波爾基特(8)


(也就是說,如果您的 sudo 配置是無密碼的,那麼使用「sudo」與讓 polkit 立即允許該操作之間沒有實際的安全差異。反之亦然,如果您的 sudo需要密碼...那麼為什麼不直接將其輸入到 polkit 對話框中呢?這是相同的密碼。

答案2

有一個選項--no-ask-password。建立一個別名:

alias systemctl='systemctl --no-ask-password'

(在 Bash、Kubuntu 中測試)。

答案3

不要將 sudo 用於 systemctl,曾經;如果你允許進行維護,正確設定 polkit。

基本原理sudo使您的程式由請求的使用者有效運作(通常:root)。包括所有連結的工具包。程式、庫或 ...sudo 配置中的任何錯誤都會使您容易受到攻擊。在 的情況下systemdsystemctl二進位檔案只是控制器(一般來說)。它才不是需要 root 權限(對於大多數用例),因為它本身不執行特權操作,而是詢問init.使用實際root帳戶(直接或通過sudo)是全有或全無的原子(炸彈)解決方案,而僅有的所需要的就是授權不:驗證反對systemd。既然systemd明白polkit授權, 使用經過驗證的root只是授予的權限太多了。

考慮 中的一個錯誤systemctl,它允許直接呼叫任意命令(而不是通過systemd)。當root權限由 授予時sudo,可以執行任意 EUID=0 的命令。以systemctl非特權使用者身分執行時,只能使用他先前取得存取權限的帳戶來執行此類命令。這是一些基本安全規則的簡單結果:

  • 僅使用所需的權限集(不是完整的權限集 == root),
  • 僅將這些權限授予需要它的程式碼(在systemd不授予權限的情況下授權systemctl)。

至於成為一台機器的唯一用戶 - 如果您使用非特權帳戶而不是該帳戶工作root,我假設您想限制您正在執行的程式獲得多餘的權限。systemctl僅因為該root帳戶是authorized命令而授予它們systemd是多餘的權限。

此外,polkit您可以為不同的操作(啟動/停止/重新載入/其他)和不同的服務設定不同的存取標準。您可以將精確的指令放入 中sudoers,但 polkit 解決方案知道此類指令的特定部分。

結論sudo:如果有任何特權較低的方法可用,請勿使用。sudo是全有或全無的最後解決方案。

如果您希望密碼提示以文字形式顯示,而不是圖形形式,只需取消設定顯示,例如:將您的終端機與執行身份驗證代理程式的圖形會話解除綁定。

相關內容