问题描述
我定义了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 Fried的excellent answer除外)是:
可以将gksu配置为使用sudo或su作为其后端。 Ubuntu中gksu的默认行为是充当sudo的前端,而不是su的前端。也就是说,默认情况下,gksu和gksudo的行为完全相同。请参阅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
系统将提示您输入两次密码:
首先,必须输入admin的密码,以使normaluser与su后端一起作为admin运行命令。
其次,您必须输入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
参考资料