使用PolicyKit为我的应用程序提供对受限文件的访问权限

时间:2012-04-25 19:21:11

标签: c# linux ubuntu permissions mono

我正在为Ubuntu编写application,它允许您自定义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运行我的应用程序,但实际上我在应用程序中的一个按钮行中更多地考虑解锁需要访问该目录的功能,当时 < / em>要求输入密码以获取对文件夹中文件的写入权限。通过这种方式,对运行应用程序的系统没有特殊权限的人仍可以自定义一些基本设置。

1 个答案:

答案 0 :(得分:1)

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

E.g。仅作为模拟&#34;命令行&#34;问题是以root身份编写文件:

sudo echo Hello World >/root/hello.txt

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

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

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

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