如何从非管理员用户会话中以管理员身份运行带有 GUI 的应用程序?

Bor*_*ris 38 sudo gksu su

我定义了 2 个用户帐户:

  • 一个具有管理员权限(具有sudo权限)=> 让我们称之为adminuser。
  • 没有任何特权的第二个 => 让我们调用它 ,我在这个第二个用户上配置自动登录。 normaluser
    normaluser

因此,当我打开一个normaluser会话并希望以管理员权限运行应用程序时,
我打开一个终端Ctrl+ Alt+T并:

su adminuser
sudo anyapplication ...
Run Code Online (Sandbox Code Playgroud)

它工作正常,无需退出normaluser会话(无需打开adminuser会话)。


但是,如果应用程序需要使用 GUI(图形用户界面)运行,我该怎么办?
我想:

su adminuser
gksu anyapplication ...
Run Code Online (Sandbox Code Playgroud)

但我明白了

** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0
Run Code Online (Sandbox Code Playgroud)

Eli*_*gan 31

术语

在这个答案中:

  • normaluser是谁不是管理员,而不能作为运行命令的普通用户root使用sudo。
  • admin是谁能够为运行命令的管理员root用sudo。(当然,任何图形命令都应该使用像gksu/这样的图形前端gksudo,而不是sudo直接使用。)
  • anyapplication是图形应用程序normaluser想要作为root. normaluser知道admin的密码并且(大概)被告知他/她可以将其用于此目的。

问题

您的问题的原因,以及到目前为止大多数其他答案都不起作用的原因(除了Marty Fried的优秀答案),是:

  • gksu可以配置为使用其中之一sudo 或 su作为其后端。gksuUbuntu 中的默认行为是作为 的前端sudo,而不是作为su. 也就是说,默认情况下,gksu和gksudo行为完全一样。请参阅联机帮助页。
  • normaluser不是管理员,因此不能作为运行命令root与sudo。sudo提示输入运行它的用户的密码,而不是他们想成为的用户的密码。不能使用您的密码以不是您的人的身份执行操作,这意味着不是管理员。
  • normaluser,只要它不是一个来宾帐户, 可以运行为其他用户的命令有su,将在其他用户的密码。但gksu充当 的前端sudo,而不是su。
  • normaluseras不能直接运行任何命令root,因为normaluser不能使用sudo,也没有人可以变成rootwithsu因为没有root密码。

解决方案

该解决方案需要编写一个执行两个身份验证步骤的命令:

  • normaluser必须变成admin运行图形命令。为此,normaluser必须gksu使用-w标志运行以使其以su-mode而不是默认的sudo-mode 运行,以及-u运行命令的标志admin而不是root。
  • 该命令运行方式admin必须调用gksu ,而不该-w标志使用sudo成为root。

这是命令(是的,我已经测试过了;-)):

gksu -w -u admin gksu anyapplication
Run Code Online (Sandbox Code Playgroud)

系统将提示您输入两次密码:

  1. 首先,你必须输入admin的密码,让normaluser作为运行命令admin与su后端。
  2. 其次,你必须输入admin的密码,让admin作为运行命令root与sudo后端。

这是正确的。您输入admin的密码两次。

其他注意事项:

  • 如果你愿意,你可以更换第二gksu带gksudo,使其不易混淆。在 Ubuntu 中,它们是等价的。(你也可以更换一次gksu用gksudo,但是这将是非常违反直觉和混乱。)
  • -w是 的缩写形式--su-mode。
  • -S是 的缩写,--sudo-mode但两者都不必使用,因为sudo-mode是默认值。
  • 你可能想先用一些非常无害的命令来测试它,以确保它做你想要的。(它会,但你不需要相信我。)例如:
    gksu -w -u admin gksu xclock
    Run Code Online (Sandbox Code Playgroud) xclock 是一个不错的简单时钟窗口应用程序。


Mar*_*ied 12

一种可能有效的方法是在您第一次切换到管理员用户时使用“sux”而不是“su”。sux 修复了从欺骗用户运行 x 应用程序的问题。它位于标准存储库中,可以通过sudo apt-get install sux在命令行中输入来安装。

然后,只需使用“sux”而不是“su”,它就会按照您期望的方式工作。

让我们重用应用程序的例子xclock:

sux admin
gksu xclock
Run Code Online (Sandbox Code Playgroud)

  • Ubuntu 14.04 64bits 上没有更多版本的 `sux``;(` (3认同)
  • 似乎有[另一种选择](http://askubuntu.com/a/462848/32413) (2认同)

小智 8

PAM 可以照顾它

这适用于我在 Ubuntu 16.04 上(编辑:它也适用于 18.04 LTS):

把线:

session optional pam_xauth.so
Run Code Online (Sandbox Code Playgroud)

某处:

/etc/pam.d/su
Run Code Online (Sandbox Code Playgroud)

和/或

/etc/pam.d/sudo
Run Code Online (Sandbox Code Playgroud)

然后执行“su -”或“sudo su -”,我可以以 root 用户身份使用图形应用程序。


int*_*_ua 7

执行程序

kdesudo 和 gksu 有一个普遍存在的替代方案 -pkexec它来自policykit-1许多软件包所需的软件包。

  • 如果出现错误“无法打开显示”,请尝试传递 DISPLAY 和 XAUTHORITY env 变量,例如 `pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus` (2认同)