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

2024-04-26 15:02:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

另一个解决方案是,当用户按下按钮时,使用pkexec重新启动我的应用程序,但我确实希望避免以超级用户身份运行整个应用程序。你知道吗

我认为我应该做的是,当用户按下按钮时,以root身份启动一个新的无头进程,并查询这个进程中需要特权权限的操作。进程应该只在我的用户应用程序运行之前运行,理想情况下,只接受来自我的应用程序的连接。你知道吗

这是一个正确的架构还是有一些我没有看到/考虑的重大缺陷?你知道吗

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

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

Tags: 用户应用程序权限gtk进程空间情况身份