是否存在与桌面无关的gksudo?


17

有许多用于各种桌面的工具,这些工具旨在以root用户身份运行图形应用程序。gksudokdesudoempower,等...

但是,如果我正在编写可在任何Linux桌面上使用的脚本怎么办?有xdg-sudo某种..?在桌面环境中获取sudo访问的标准?

Answers:


16

按照@Tachyons的建议,我研究了很多关于pkexec它,这太棒了

  • 它是广泛使用的软件包PolicyKit的一部分。
  • freedesktop.org主办和赞助
  • GnomeUnityMATECinnamonKDELXDEXFCE以及其他可能的默认值
  • 通过D-Bus工作,因此它与桌面完全无关,并具有定义明确的协议。
  • 在许多DE中,它用于多种服务,例如登录屏幕,关机/重新启动,磁盘管理(udisk / automount)等。

因此,可以满足所有要求,我想这是“通用gksudo”最接近的东西。

就是说,这pkexec是PolicyKit的命令行前端。有2种基本操作模式:

  • 就像使用一样简单地运行它,您会sudo得到一个漂亮的GUI提示符:

    $ pkexec rm -rf /

pkexec GUI提示

  • 或为您的应用程序创建PolicyKit授权文件,将其放入中/usr/share/polkit-1/rules.d,它将允许大量自定义和与安全性相关的选项,例如,仅root用户可以执行某些操作,不需要密码进行其他操作,仅限于某些路径的访问等等。您可以以惊人的粒度微调您的设置。

6

一种更通用的方法是编写“帮助程序”。这样的程序会提示用户输入密码。如果您确定已安装Zenity,则可以使用它,否则,您需要使用Python或可以与GUI交互的其他工具编写帮助程序。

阅读sudo手册中的-A(“ askpass”)和-S(stdin)选项。

请记住,sudo从脚本运行时,需要使用-H(home)选项进行模拟gksudo

此方法效果很好,但是您需要彻底测试帮助程序以确保它没有错误。


1
您还需要处理程序中传递的xauth令牌-这并非易事。
symcbean

4

不,没有任何标准方法可以获取root(或任何其他用户)特权。

如果您想与尽可能多的系统兼容,则不要做任何事情,而要告诉用户她(他)必须以特定用户身份运行脚本。然后由用户/管理员来配置系统,以便您的脚本以正确的方式运行。

对如何使用最常见的身份验证系统(如su,sudo和ConsoleKit)提出一些建议。


适用于2009年初,但值得庆幸的是,现在polkit(以前称为PolicyKit)已经足够广泛地被认为是标准。
MestreLion
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.