如何配置pkexec?

阅读这些问题和答案:

  • 何时使用pkexec与gksu / gksudo?
  • 为什么默认不再安装gksu?

给我带来了另一个会给该命令的新用户带来问题:

  • 如何配置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使用(Policy Kit)?

如何配置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.[...] 

    因此,您可以创建( 永久 )别名(这是最简单的方法):

     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创建一个名为com.ubuntu.pkexec.gedit.policy的新策略文件,其中包含以下xml代码,其中最重要的是设置org.freedesktop.policykit.exec.allow_gui空值:

         Authentication is required to run gedit gedit  auth_admin auth_admin auth_admin  /usr/bin/gedit true   

如何告诉它在第一次将命令应用到命令后不要求输入密码?

对于这三个设置标记:策略文件中的allow_anyallow_inactiveallow_active ,可以使用以下选项:

  • :用户无权执行操作。 因此无需validation。
  • :用户有权在没有任何身份validation的情况下执行操作。
  • auth_self :需要身份validation,但用户不必是管理用户。
  • auth_admin :需要以管理用户身份validation。
  • auth_self_keep :与auth_self相同但是,与sudo一样,授权持续几分钟。
  • auth_admin_keep :与auth_admin相同,但与sudo一样,授权持续几分钟。

来源: Polkit – 结构 – 行动

因此,如果您使用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时作为管理员进行身份validation的默认要求,确定某些特定用户不需要。 或者根本不允许使用GParted。

资料来源: Polkit – 结构

是否有GUI应用程序来配置pkexec使用?

据我所知,直到现在(2014年1月18日)都不存在这样的事情。 如果将来我会找到一些东西,我也不会忘记更新这个答案。

除了Radu的回答:我不会使用别名pkexec,而是使用gksudo

为什么? 您无需重写脚本。

我使用以下配置:

  • 打开一个终端
  • cd /usr/local/bin
  • sudo gedit gksudo (创建名为“gksudo”的新文件
  • 写下以下内容:

    • pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $@

    • (不要忘记最后的$@ 。这是为了重定向所有参数)

  • 保存并退出

  • 使文件可执行: chmod 755 gksudo
  • 现在,您应该在系统上拥有一个function齐全的gksudo命令 – 永久。

出于文档原因,我会写,我尝试过但没有解决的问题:

  • 别名pkexec =’pkexec env […]’
  • alias gksudo =’pkexec […]’
    • 不是永久性的,只留在一个终端
  • 将别名添加到~/.bash_aliases
    • 如果您先打开终端,则可以正常工作 如果双击脚本,则不起作用
  • 创建一个带参数的pkexec链接( ln -s pkexec [...]
    • 快速googleing后,似乎linux不支持链接中的参数