问题描述
我定义了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 noroot
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