當前位置: 首頁>>技術教程>>正文


如何配置pkexec?

, ,

問題描述

閱讀以下問題和答案:

給我帶來了另一個問題,它將為該命令的新用戶帶來麻煩:

  • 如何配置pkexec以便於使用?

例如,當執行以下操作時:

(在終端中打開文件)

pkexec nano /etc/mysql/my.cnf  

(在GUI中打開文件)

pkexec gedit /etc/mysql/my.cnf  

最後一個出現以下錯誤:

 pkexec must be setuid root

現在,這給我帶來了以下問題:

  1. 如何配置pkexec以避免出現此情況?類似於執行相同操作時sudo /gksu的行為(它們僅要求輸入密碼)。

  2. 如果適用,如何在第一次將密碼應用於命令(或可配置的情況下包括第一個命令)之後告訴它不要輸入密碼?

  3. 如果尚不存在配置文件,該保存在哪裏?

  4. 是否有GUI應用程序可配置pkexec用法(策略工具包)?

最佳思路

如何配置pkexec以避免在運行GUI應用程序時出錯?

我發現了兩種可能的方法:

  1. 如您所見,使用以下命令:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    不會給你任何錯誤。這是正常的,因為man pkexec在這件事上非常清楚:

    [...] pkexec will not allow you to run X11 applications
    as another user since the $DISPLAY and $XAUTHORITY environment
    variables are not set.[...]

    結果,您可以創建一個(permanent)別名(這是最簡單的方法):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. 或者,(再次)如man pkexec所述:

    [...] These two variables will be retained if the
    org.freedesktop.policykit.exec.allow_gui annotation on an action is set
    to a nonempty value; this is discouraged, though, and should only be
    used for legacy programs.[...]

    您可以在/usr/share/polkit-1/actions中使用以下xml代碼創建一個名為com.ubuntu.pkexec.gedit.policy的新策略文件,其中最重要的是將org.freedesktop.policykit.exec.allow_gui設置為非空值:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE policyconfig PUBLIC
      "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
      "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
    <policyconfig>
    
      <action id="com.ubuntu.pkexec.gedit">
        <message gettext-domain="gparted">Authentication is required to run gedit</message>
        <icon_name>gedit</icon_name>
        <defaults>
          <allow_any>auth_admin</allow_any>
          <allow_inactive>auth_admin</allow_inactive>
          <allow_active>auth_admin</allow_active>
        </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

第一次將其應用於命令後,如何告訴它不要求輸入密碼?

對於策略文件中的這三個設置標簽:allow_anyallow_inactiveallow_active,以下選項可用:

  • 否:用戶無權執行該操作。因此,不需要認證。

  • 是:用戶被授權無需任何認證即可執行該操作。

  • auth_self:需要身份驗證,但用戶不必是管理用戶。

  • auth_admin:需要認證為管理用戶。

  • auth_self_keep:與auth_self相同,但是與sudo一樣,授權持續幾分鍾。

  • auth_admin_keep:與auth_admin相同,但是與sudo一樣,授權持續幾分鍾。

來源:Polkit – Structure – Actions

因此,如果您使用auth_admin_keep選項(或者,如果適用,則為auth_self_keep),pkexec將在一段時間內不再要求輸入密碼(默認情況下,該時間設置為我檢查的5分鍾)。此處的缺點是,此功能僅適用於同一命令/應用程序,並且對所有用戶均有效(除非在以後的配置中被否決)。

如果尚不存在配置文件,該保存在哪裏?

配置文件或polkit定義可以分為兩種:

  • 操作位於/usr/share/polkit-1/actions中的XML .policy文件中。每個操作都具有一組默認權限(例如,您需要標識為管理員才能使用GParted操作)。可以否決默認值,但是編輯動作文件不是正確的方法。此策略文件的名稱應具有以下格式:

    com.ubuntu.pkexec.app_name.policy
  • 授權規則在JavaScript .rules文件中定義。它們位於兩個位置:第三方程序包可以使用/usr/share/polkit-1/rules.d(盡管很少,但可以使用),而/etc/polkit-1/rules.d用於本地配置。 .rules文件指定用戶的子集,引用動作文件中指定的一個(或多個)動作,並確定該(一個或多個)用戶可以采取哪些限製措施。例如,規則文件可能會推翻使用GParted時所有用戶以管理員身份進行身份驗證的默認要求,從而確定某些特定用戶不需要。或根本不允許使用GParted。

來源:Polkit – Structure

是否有用於配置pkexec使用情況的GUI應用程序?

據我所知,到目前為止(2014年1月18日)還不存在這樣的東西。如果將來我能找到一些東西,我也不會忘記更新此答案。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/10212.html,未經允許,請勿轉載。