gpt4 book ai didi

c# - 使用 PolicyKit 让我的应用程序访问受限文件

转载 作者:IT王子 更新时间:2023-10-29 00:42:24 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

例如作为模拟的“仅命令行”问题将以根用户身份写入文件:

sudo echo Hello World >/root/hello.txt

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

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

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

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

关于c# - 使用 PolicyKit 让我的应用程序访问受限文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10322342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com