如何配置 pkexec 不要求输入密码?

如何配置 pkexec 不要求输入密码?

我有一个 GUI 应用程序,需要调用具有超级用户权限的守护程序(用 Python 编写)。我希望在不提示用户输入密码的情况下执行此操作。

由于守护进程是一个脚本,我无法直接设置 SUID 位。我可以为此编写一个 C 包装器,但我宁愿不重新发明轮子,尤其是当我的错误可能导致系统安全性受到严重损害时。

在这种情况下,我通常会添加一行,/etc/sudoers允许用户使用 NOPASSWD 指令以 root 身份执行守护进程而无需密码。这在命令行中工作正常。但是,当我从 GUI 执行此操作时,pkexec会弹出一个对话框,要求输入用户的密码。似乎在 Ubuntu 上,sudo从 GUI 调用 以某种方式被 拦截pkexec

有没有一种干净的方法可以解决这个问题?我真的不想处理 setuid 脚本的麻烦。

答案1

下列说法是不恰当的:sudo“在 Ubuntu 上,来自 GUI 的调用似乎以某种方式被拦截了pkexec.pkexec与 没有太多共同之处sudo。与 相比sudopkexec不授予整个进程 root 权限,而是允许更精细地控制集中式系统策略。

现在,如果你想运行一个 GUI 应用程序而不被要求输入密码pkexec,这并不难做到。让我们举个例子分区。打开后,您将看到以下对话框,要求您输入密码:

gparted 身份验证

点击细节对话窗口现在看起来如下:

gparted 身份验证 - 详细信息

从这里您要做的就是使用以下命令打开文件:/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

并更改以下几行:

      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>

内容如下:

      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>

保存文件并关闭。接下来,当你打开分区将不再要求您输入密码。

相关内容