如何配置pkexec?
阅读这些问题和答案:
- 何时使用pkexec与gksu / gksudo?
- 为什么默认不再安装gksu?
给我带来了另一个会给该命令的新用户带来问题:
- 如何配置
pkexec
以方便使用?
例如,执行以下操作时:
(在终端打开文件)
pkexec nano /etc/mysql/my.cnf
(在GUI中打开文件)
pkexec gedit /etc/mysql/my.cnf
最后一个得到以下错误:
pkexec must be setuid root
现在这给我带来了以下问题:
-
如何配置
pkexec
以避免这个? 类似于sudo
/gksu
在做同样事情时的行为(他们只询问密码)。 -
如果适用,如何告诉它在第一次将其应用于命令后不要求密码(或者如果可配置,则包括第一个命令)?
-
如果尚未存在配置文件,请在何处保存?
-
是否有GUI应用程序来配置
pkexec
使用(Policy Kit)?
如何配置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.[...]
因此,您可以创建( 永久 )别名(这是最简单的方法):
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
创建一个名为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_any
, allow_inactive
和allow_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不支持链接中的参数
- 如何解决“无法找到预期的条目’restricted / binary-1386 / Packages’错误的sources.list条目或格式错误的文件”?
- 现在我有Firefox 49或更高版本,我如何看Netflix?