有各种适用于各种桌面的工具,旨在以 root 身份运行图形应用程序。,,,gksudo
等等......kdesudo
empower
但是,如果我编写的脚本可以在任何 Linux 桌面上使用,该怎么办?是否有xdg-sudo
某种...?在桌面环境中获取 sudo 访问权限的标准?
答案1
根据@Tachyons的建议,我做了很多研究,结果pkexec
如下惊人的!
- 这是PolicyKit,一个广泛使用的包。
- 主办方及赞助免费桌面网站
- 默认侏儒,统一,伴侣,肉桂,桌面环境,激光去极化仪和西门子以及可能的其他
- 通过 D-Bus 工作,因此它完全与桌面无关,并具有明确定义的协议。
- 在许多桌面环境中用于多种服务例如登录屏幕、关机/重启、磁盘管理(udisks/automount)等等。
所以是的,它满足所有要求,我想这是最接近“通用 gksudo”可。
也就是说,pkexec
这是 PolicyKit 的命令行前端。有两种基本操作模式:
只需像运行一样运行它
sudo
,您就会得到一个漂亮的 GUI 提示:$ pkexec rm -rfX /
- 或者为您的应用程序创建一个 PolicyKit 授权文件,将其放入
/usr/share/polkit-1/rules.d
,它将允许大量自定义和安全相关的选项,例如仅对某些操作进行 root 访问,其他操作不需要密码,访问仅限于某些路径等。您可以以惊人的粒度微调您的设置。
答案2
更通用的方法是编写一个“辅助程序”。这样的程序会提示用户输入密码;如果您确定安装了 Zenity,则可以使用它,否则您需要用 Python 或其他可以与 GUI 交互的程序编写辅助程序。
阅读sudo
手册以了解-A
(“askpass”)和-S
(stdin)选项。
请记住,当您sudo
从脚本运行时,您需要-H
(home) 选项来模拟gksudo
。
这种方法效果很好,但是您需要彻底测试辅助程序以确保它没有错误。
答案3
不,没有任何标准的方式来获取 root(或任何其他用户)的权限。
如果您希望与尽可能多的系统兼容,请不要采取任何假设,而是告诉用户她/他必须以特定用户身份运行您的脚本。然后由用户/管理员配置系统,以便以正确的方式运行您的脚本。
对如何使用最常见的身份验证系统(如 su、sudo 和 ConsoleKit)提出一些建议会很好。