如何配置pkexec不要求密码?

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

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

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

这有干净的方法吗? 我真的宁愿不必处理setuid脚本的麻烦。

说这句话是不恰当的: “看来在Ubuntu上,从GUI调用sudo会以某种方式被pkexec拦截”pkexecsudo没有多少共同之处。 与sudopkexec不会授予整个进程root权限,而是允许对集中式系统策略进行更精细的控制。

现在,如果您想在没有pkexec密码的情况下运行GUI应用程序,这并不难做到。 我们以GParted为例。 当您打开它时,您将看到以下对话窗口,通过密码询问您:

gparted authenticate

单击“ 详细信息” ,对话框窗口现在看起来像:

gparted authenticate  - 详细信息

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

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

并更改以下行:

   auth_admin   auth_admin   auth_admin  

具体如下:

   yes   yes   yes  

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