![术语](https://linux22.com/image/1110906/%E6%9C%AF%E8%AF%AD.png)
我定义了2个用户帐户:
- 具有管理员权限(有
sudo
权限)=> 让我们调用它adminuser
。 - 第二个没有任何特权 => 让我们称它为
normaluser
我为第二个用户配置了自动登录normaluser
。
所以当我打开normaluser
会话并想要以管理员权限运行应用程序,
我打开一个终端++Ctrl并且:AltT
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
答案1
术语
在这个答案中:
normaluser
是普通用户,不是管理员,不能像 那样运行root
命令sudo
。admin
是管理员,可以使用 运行命令root
。sudo
(当然,任何图形命令gksu
应该使用像/这样的图形前端gksudo
,而不是sudo
直接。)anyapplication
是图形应用程序的名称normaluser
想要以 的身份参选root
。normaluser
知道admin
的密码,并且(大概)被告知他/她可以将其用于此目的。
问题
导致您遇到的问题的原因,以及迄今为止大多数其他答案不起作用的原因(除了马蒂·弗里德的很好的答案), 是:
gksu
可以配置为使用sudo
或者su
作为其后端。Ubuntu 中的默认行为gksu
是充当的前端sudo
,不是也就是说su
,默认情况下,gksu
和gksudo
表现一模一样。 看手册页。normaluser
不是管理员,因此无法运行命令root
。sudo
提示sudo
输入密码运行它的用户,而不是他们想成为的用户. 无法使用您的密码以他人的身份执行操作不是管理员意味着什么。normaluser
,前提是该账户不是来宾账户, 能以另一个用户身份运行命令和su
,放入其他用户的密码. 但gksu
充当 的前端sudo
,而不是su
。normaluser
不能直接地以 方式运行任何命令root
,因为normaluser
不能用sudo
, 和没有人可以成为root
与su
因为没有root
密码。
解决方案
该解决方案需要编写一个执行两个身份验证步骤的命令:
normaluser
必須成admin
运行图形命令。为此,normaluser
gksu
必须带着旗帜跑-w
才能让它跑进去苏模式而不是默认的sudo 模式以及-u
运行命令的标志admin
代替root
。- 命令运行为
admin
必须援引gksu
没有-w
用来sudo
成为 的标志root
。
这是命令(是的,我已经测试过了;-)):
gksu -w -u admin gksu anyapplication
系统将提示您输入密码两次:
- 首先,您必须输入
admin
的密码,让normaluser
运行命令admin
与su
后端。 - 其次,您必须输入
admin
的密码,让admin
运行命令root
与sudo
后端。
没错。你输入admin
的密码两次。
其他说明:
- 如果您愿意,可以将第二个替换
gksu
为gksudo
以减少混淆。在 Ubuntu 中,它们是等效的。(您也可以将第一个替换gksu
为gksudo
,但这会非常违反直觉且令人困惑。) -w
是 的缩写--su-mode
。-S
是的缩写,--sudo-mode
但不必使用,因为sudo 模式是默认的。- 您可能希望先用一些相当无害的命令进行测试,以确保它能按照您的要求运行。(它会按要求运行,但您不必相信我。)例如:
gksu -w -u admin gksu xclock
xclock
是一个简单好用的时钟窗口应用程序。
答案2
一种可能有效的方法是,首次切换到管理员用户时使用“sux”而不是“su”。sux 修复了从欺骗用户运行 x 应用程序的问题。它位于标准存储库中,可以通过sudo apt-get install sux
在命令行中输入来安装。
然后,只需使用“sux”代替“su”,它就会按您预期的方式工作。
让我们重用该应用程序的示例xclock
:
sux admin
gksu xclock
答案3
PAM 可以处理
这对我适用于 Ubuntu 16.04(编辑:它也适用于 18.04 LTS):
放置以下行:
session optional pam_xauth.so
在某处:
/etc/pam.d/su
和/或
/etc/pam.d/sudo
然后执行“su - ”或“sudo su - ”我就可以以 root 身份使用图形应用程序。
答案4
对我来说这是有效的:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY yourcommand commandoption1 commandoption2
这里你必须yourcommand commandoption1 commandoption2
用真正的命令和它的参数替换该部分