我已经编写了一个 python 脚本,它从启动板下载 deb 文件,然后调用一个 shell 脚本来使用外星人将 debs 转换为 rpms。
shell 脚本使用外星人,因此需要以 root 身份运行。
该程序使用线程池异步下载deb文件,使用threadpool.apply_async,然后使用处理池异步调用shell脚本,因此整个事情发生得相当快。
一切正常,但调用外星人的 shell 脚本需要是 root 否则无法正确构建包。当我第一次完成脚本时,我会在使用 sudo 之后使用 pkexec 调用外星人。在这两种情况下,我都有几个问题。
第一个是在root启动时,我丢失了用户的环境,因此丢失了pip安装的python库。也许我可以使用 sudo -s 或类似的,但第二个问题是我必须为构建的每个包输入我的 root 密码。
我想要做的是运行python脚本,qt gui和所有,作为普通用户,选择要转换的文件,然后点击安装按钮,只输入我的超级用户密码一次。
我决定过滤掉python的安装部分,包括线程下载和对shell脚本的线程调用,然后尝试以root/超级用户身份运行这些部分。
我为这个安装部分创建了一个 dbus 服务,并且在经历了一段陡峭的 dbus 学习曲线之后,设法让该服务正常工作。但是,让脚本通过身份验证并提高其权限,我并不高兴。
我已经能够使用 polkit 显示密码对话框并授权超级用户,但我不知道如何使用 polkit 的返回值
`authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)`
它显示密码对话框,用于授权,但不处理提升脚本权限。
我已将 python 安装服务设置为 0500 权限,因此希望一旦我弄清楚如何提升权限,root 用户就有能力读取和执行当前在会话总线上创建的服务。
如何提升权限,同时保留用户的环境变量,这样我就不必将 python 模块安装到 root 帐户中?
非常感谢您提前提供的帮助...
附言。我编写了一个 polkit 操作文件和一个 polkit 规则,但在每种情况下,我都不确定操作 id 与特权提升有何关系。pps。我可以/应该使用 pam 吗?