当前位置: 首页>>技术教程>>正文


如何配置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/article/10212.html,未经允许,请勿转载。