使用 PolicyKit 向我的应用程序授予对受限文件的访问权限

本文关键字:文件 访问 权限 访问权 PolicyKit 我的 应用程序 使用 | 更新日期: 2023-09-27 18:32:26

我正在为 Ubuntu 编写一个应用程序,它允许您自定义 Unity 2D 桌面环境.
有些设置,我可以使用特定于用户的 Dconf 进行更改。因此,如果一个用户更改了某个设置,则该设置仅适用于该用户.
但是,对于其他设置,我需要编辑位于/usr/share/unity-2d/中的文本文件,普通用户无法写入。为了解决这个问题,我认为让用户以root身份运行应用程序是个好主意,这样可以确保他们可以访问/usr/share/unity-2d/。仅当应用程序以 root 身份运行时,并且其中一个 Dconf 设置发生更改时,它会在 root 用户的 Dconf 中更改,因此更改不适用于实际用户。

我需要找到解决这个问题的方法,我的第一个现实想法是使用PolicyKit。我需要确保我的应用程序以当前用户身份运行(因此并不总是以 root 用户身份运行),但它确实可以访问/usr/share/unity-2d/及其中的文件。我正在使用 Mono 框架用 C# 编写应用程序。我对 PolicyKit 没有任何经验,说实话,这是我第一次尝试制作一个严肃的 Linux 应用程序。

我的想法是PolicyKit,但如果你们中的一个人有另一种(现实的)方法来实现这一目标,那对我来说也很好。如果归结为使用PolicyKit,我想获得更多有关如何执行此操作的信息,以及所有功能。我知道我可能可以使用 pkexec 运行我的应用程序,但我实际上更多地考虑了应用程序中按钮的行,以解锁需要访问该目录的功能,当时该目录要求输入密码以获得对文件夹中文件的写入访问权限。这样,对运行应用程序的系统没有特殊权限的人仍然可以自定义一些基本设置。

使用 PolicyKit 向我的应用程序授予对受限文件的访问权限

好吧,显而易见的解决方案是有两个进程,一个是带有GUI的普通用户应用程序,另一个是以root身份运行的东西,它以root身份操作文件。

例如,作为模拟的"仅命令行"问题,将以root身份写入文件:

sudo echo Hello World >/root/hello.txt

不起作用,因为重定向是由交互式 shell 完成的,并且它没有 root 的访问权限。

经典的解决方案是使用两个过程:

echo Hello World | sudo tee /root/hello.txt

现在/root/hello.txt 文件由 tee 打开,它以 root 身份运行(通过 sudo),这是允许的。