问题描述
阅读以下问题和答案:
给我带来了另一个问题,它将为该命令的新用户带来麻烦:
-
如何配置
pkexec
以便于使用?
例如,当执行以下操作时:
(在终端中打开文件)
pkexec nano /etc/mysql/my.cnf
(在GUI中打开文件)
pkexec gedit /etc/mysql/my.cnf
最后一个出现以下错误:
pkexec must be setuid root
现在,这给我带来了以下问题:
-
如何配置
pkexec
以避免出现此情况?类似于执行相同操作时sudo
/gksu
的行为(它们仅要求输入密码)。 -
如果适用,如何在第一次将密码应用于命令(或可配置的情况下包括第一个命令)之后告诉它不要输入密码?
-
如果尚不存在配置文件,该保存在哪里?
-
是否有GUI应用程序可配置
pkexec
用法(策略工具包)?
最佳思路
如何配置pkexec
以避免在运行GUI应用程序时出错?
我发现了两种可能的方法:
-
如您所见,使用以下命令:
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'
-
或者,(再次)如
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_any
,allow_inactive
和allow_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。
是否有用于配置pkexec
使用情况的GUI应用程序?
据我所知,到目前为止(2014年1月18日)还不存在这样的东西。如果将来我能找到一些东西,我也不会忘记更新此答案。