当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

我定义了2个用户帐户:

  • 一个具有管理员权限的用户(右对sudo)=>让我们称之为adminuser

  • 没有任何特权的第二个=>让我们称之为normaluser,我在第二个用户normaluser上配置了自动登录。

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

su adminuser
sudo anyapplication ...

它可以正常工作,而不必退出normaluser会话(无需打开adminuser会话)。


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

su adminuser
gksu anyapplication ...

但我明白了

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

最佳办法

PAM可以照顾好它

这对我在Ubuntu 16.04上有效(编辑:在18.04 LTS上也适用):

把线:

session optional pam_xauth.so

在某处:

/etc/pam.d/su

和/或

/etc/pam.d/sudo

然后执行“ su-”或“ sudo su-”,我可以将图形应用程序用作root。

次佳办法

Terminology

在这个答案中:

  • normaluser是不是管理员的普通用户,因此无法通过sudo作为root来运行命令。

  • admin是管理员,可以通过sudo作为root来运行命令。 (当然,任何图形命令都应使用图形前端,例如gksu /gksudo,而不应直接使用sudo。)

  • anyapplication是图形应用程序的名称,normaluser希望以root的身份运行。 normaluser知道admin的密码,并且(大概)被告知他(他)可以将其用于此目的。

问题

问题的原因以及迄今为止其他大多数答案都不起作用的原因(Marty Friedexcellent answer除外)是:

  • 可以将gksu配置为使用sudosu作为其后端。 Ubuntu中gksu的默认行为是充当sudo的前端,而不是su的前端。也就是说,默认情况下,gksugksudo的行为完全相同。请参阅the manpage

  • normaluser不是管理员,因此无法通过sudo作为root运行命令。 sudo提示输入运行它的用户的密码,而不是他们想要成为的用户的密码。如果您不是管理员,则无法使用密码来执行操作,这意味着您不是管理员。

  • 如果不是来宾帐户,则normaluser可以使用su作为另一用户运行命令,并输入其他用户的密码。但是gksu充当sudo的前端,而不是su的前端。

  • normaluser无法直接以root的身份运行任何命令,因为normaluser无法使用sudo,并且没有人可以通过su成为root,因为there is no root password

解决方案

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

  • normaluser必须成为管理员才能运行图形命令。为此,normaluser必须使用带有-w标志的gksu使其在su-mode中运行,而不是在默认的sudo-mode中运行,并且-u标志必须以admin而不是root身份运行该命令。

  • admin身份运行的命令必须调用没有-w标志的gksu才能使用sudo成为root

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

gksu -w -u admin gksu anyapplication

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

  1. 首先,必须输入admin的密码,以使normalusersu后端一起作为admin运行命令。

  2. 其次,您必须输入admin的密码,以使admin作为带有sudo后端的root运行命令。

那就对了。您两次输入admin的密码。

杂项注意事项:

  • 如果愿意,可以将第二个gksu替换为gksudo,以减少混乱。在Ubuntu中,它们是等效的。 (您也可以用gksudo替换第一个gksu,但这会非常违反直觉和令人困惑。)

  • -w--su-mode的缩写。

  • -S--sudo-mode的缩写形式,但由于sudo-mode是默认设置,因此两者都不用。

  • 您可能需要先使用一些非常无害的命令对其进行测试,以确保它可以满足您的要求。 (可以,但是不需要您信任我。)例如:

    gksu -w -u admin gksu xclock

    时钟

    是一个很好的简单clock-window应用程序。

第三种办法

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

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

让我们重用应用程序示例xclock

sux admin
gksu xclock

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8115.html,未经允许,请勿转载。