Lui*_*ado 34 command-line sudo pkexec
阅读这些问题和答案:
给我带来了另一个会给该命令的新用户带来问题的问题:
pkexec方便使用?例如,在执行以下操作时:
(在终端中打开文件)
pkexec nano /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)
(在 GUI 中打开文件)
pkexec gedit /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)
最后一个得到以下错误:
pkexec must be setuid root
Run Code Online (Sandbox Code Playgroud)
现在这给我带来了以下问题:
如何配置pkexec以避免得到这个?类似于如何sudo/gksu做同样的事情时的行为(他们只要求输入密码)。
如果适用,如何告诉它在第一次将其应用于命令(或如果可配置的情况下包括第一个命令)后不要求输入密码?
如果配置文件不存在,在哪里保存?
是否有用于配置pkexec使用情况的 GUI 应用程序(策略工具包)?
Rad*_*anu 48
pkexec以避免在运行 GUI 应用程序时出错?我找到了两种可能的方法:
如您所见,使用以下内容:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
Run Code Online (Sandbox Code Playgroud)
不会给你任何错误。这是正常的,因为man pkexec在这件事上很清楚:
Run Code Online (Sandbox Code Playgroud)[...] 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'
Run Code Online (Sandbox Code Playgroud)或者,(再次)如man pkexec说:
Run Code Online (Sandbox Code Playgroud)[...] 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.[...]
您可以使用以下 xml 代码/usr/share/polkit-1/actions命名创建一个新的策略文件,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>
Run Code Online (Sandbox Code Playgroud)对于这三种设置标签:allow_any,allow_inactive并allow_active从政策文件,下面的选项:
sudo,授权持续几分钟。sudo,授权持续几分钟。资料来源:Polkit - 结构 - 动作
因此,如果您使用auth_admin_keep选项(或,如适用,auth_self_keep),pkexec则在一段时间内不会再次要求输入密码(默认情况下,我检查时此时间设置为 5 分钟)。这里的缺点是这个东西只适用于一个 - 相同 - 命令/应用程序并且对所有用户有效(除非它在以后的配置中被否决)。
配置文件或polkit定义可以分为两种:
操作在位于 .policy 的 XML .policy 文件中定义/usr/share/polkit-1/actions。每个操作都有一组附加的默认权限(例如,您需要标识为管理员才能使用 GParted 操作)。默认值可以被否决,但编辑操作文件不是正确的方法。此策略文件的名称应具有以下格式:
com.ubuntu.pkexec.app_name.policyRun Code Online (Sandbox Code Playgroud)授权规则在 JavaScript .rules 文件中定义。它们可以在两个地方找到:3rd 方包可以使用/usr/share/polkit-1/rules.d(尽管很少使用)并且/etc/polkit-1/rules.d用于本地配置。.rules 文件指定用户的子集,参考在动作文件中指定的一个(或多个)动作,并确定该/那些用户可以采取哪些限制措施。例如,在使用 GParted 时,规则文件可能会否决所有用户作为管理员进行身份验证的默认要求,确定某些特定用户不需要。或者根本不允许使用 GParted。
资料来源:Polkit - 结构
pkexec使用情况?据我所知,直到现在(18.01.2014)都不存在这样的事情。如果将来我会找到一些东西,我也不会忘记更新这个答案。