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

Chi*_*chi 12 sudo password privileges pkexec

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

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

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

有没有干净的方法来解决这个问题?我真的宁愿不必处理 setuid 脚本的麻烦。

Rad*_*anu 14

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

现在,如果您想运行 GUI 应用程序而不被 询问密码pkexec,这并不难做到。让我们以GParted为例。当您打开它时,您将看到以下对话框窗口,要求您输入密码:

gparted 认证

单击详细信息,对话窗口现在将如下所示:

gparted 身份验证 - 详细信息

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

gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
Run Code Online (Sandbox Code Playgroud)

并更改以下几行:

      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>
Run Code Online (Sandbox Code Playgroud)

具有以下内容:

      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
Run Code Online (Sandbox Code Playgroud)

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