从无特权的应用程序执行特权命令的正确方法

时间:2018-08-19 20:23:10

标签: python linux gtk policykit

我有一个可移植的GTK Python应用程序,可以在用户空间中运行。在大多数情况下,它不需要root权限,但是对于少数需要它的用户,我想让用户可以按下按钮(例如Gtk.LockButton),通过PolicyKit提供密码以及以某种方式提供密码。能够以root用户身份运行特定命令。

我知道PolicyKit处理验证但不处理升级(我只能在用户有权限的情况下获取信息,而不能实际转换当前信息或以root用户身份运行新进程),而且我知道可以安装守护程序以root权限运行,我可以委派我的操作,但是我想知道是否还有其他方法可以使我保持此应用程序的可移植性(无需安装)。

另一种解决方案是,当用户按下按钮时,使用pkexec重新启动我的应用程序,但我真的想避免以超级用户身份运行整个应用程序。

我想我应该做的是,当用户按下按钮时,以某种方式以root身份启动一个新的headless进程,并向该进程查询需要特权权限的操作。该过程仅应在我的用户应用程序运行之前运行,并且理想情况下,仅接受来自我的应用程序的连接。

这是正确的体系结构还是我看不到/没有考虑的一些大缺陷?

此外,使用该解决方案,我该如何:

  1. 使用PolicyKit进行身份验证,以root权限启动无头程序
  2. 在我的主要非特权应用程序和无头根进程之间安全地通信
  3. 确保在主非特权应用程序完成时关闭根进程

0 个答案:

没有答案