如何使用PolicyKit写入文件来获取权限

问题描述 投票:0回答:1

有一个 PyQt5 程序有一个将一些文本写入文件的方法。在编写(或阅读)之前,我必须检查我是否有执行此操作的权限。如果我没有这样的权限,那么我必须以某种方式联系Policykit(使用dbus?)来增加权限,然后执行该方法。 经过一周的互联网冲浪,我仍然没有找到可靠的指令来执行所描述的算法。 附:由于存储库限制,我无法使用 python 库 polkit。

现在我脑子里一切都混乱了,但这是我迄今为止尝试过的: 我已将 .policy、.conf 和 .service 文件添加到正确的目录中,但我想我并不完全理解它们的用途。 粗略地我明白我的程序在 dbus 的帮助下应该访问策略包,这将给予执行该方法所需的权限

python linux pyqt5 dbus polkit
1个回答
0
投票

PolicyKit 本身无法增加您的进程所拥有的权限。

它的主要用途是当您联系另一项服务(已经拥有必要的权限)并要求它代表您执行某些操作时进行访问控制。例如,PolicyKit 不会直接授予 KDE 权限来挂载 USB 记忆棒,而是授予 KDE 权限来要求 UDisks2 挂载 USB 记忆棒,并且 UDisks2 服务已经有足够的权限来执行此操作。

此外,不必联系 polkitd – 这是特权服务(例如 UDisks2)在执行操作之前会这样做。

如果没有现有的特权服务可以满足您的需求,那么仅使用PolicyKit对您没有多大帮助。

  • 当然,您可以编写自己的 D-Bus 服务来执行此操作,并安装 D-Bus .service 配置以使其作为具有 root 权限的系统服务运行。 (尝试使操作保持合理的限制和细粒度;例如“启用全局模式 foo”——而不是“将任意数据写入任意文件”。)

  • 如果做不到这一点,一种常见的方法是生成

    pkexec
    来执行操作,这实际上只是
    su
    和更好的密码提示。请注意,某些发行版最近删除了 pkexec。

  • 如果您的应用程序被允许使用 GNOME 的 GLib 或 KDE 的 KIO 库,那么这两个库都已经内置了用于特权文件更新的 PolicyKit 集成 – 应用程序可以打开

    admin:///etc/foo
    并且 GLib 或 KIO 将根据需要进行提升。

© www.soinside.com 2019 - 2024. All rights reserved.