术语

术语

我定义了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是管理员,可以使用 运行命令rootsudo(当然,任何图形命令gksu应该使用像/这样的图形前端gksudo,而不是sudo直接。)
  • anyapplication是图形应用程序的名称normaluser想要以 的身份参选rootnormaluser知道admin的密码,并且(大概)被告知他/她可以将其用于此目的。

问题

导致您遇到的问题的原因,以及迄今为止大多数其他答案不起作用的原因(除了马蒂·弗里德很好的答案), 是:

  • gksu可以配置为使用sudo 或者 su作为其后端。Ubuntu 中的默认行为gksu是充当的前端sudo不是也就是说su,默认情况下,gksugksudo表现一模一样。 看手册页
  • normaluser不是管理员,因此无法运行命令rootsudo提示sudo输入密码运行它的用户,而不是他们想成为的用户. 无法使用您的密码以他人的身份执行操作不是管理员意味着什么
  • normaluser,前提是该账户不是来宾账户, 以另一个用户身份运行命令su,放入其他用户的密码. 但gksu充当 的前端sudo,而不是su
  • normaluser不能直接地以 方式运行任何命令root,因为normaluser不能用sudo, 和没有人可以成为rootsu因为没有root密码

解决方案

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

  • normaluser必須成admin运行图形命令。为此,normalusergksu必须带着旗帜跑-w才能让它跑进去苏模式而不是默认的sudo 模式以及-u运行命令的标志admin代替root
  • 命令运行为admin必须援引gksu 没有-w用来sudo成为 的标志root

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

gksu -w -u admin gksu anyapplication

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

  1. 首先,您必须输入admin的密码,让normaluser运行命令adminsu后端。
  2. 其次,您必须输入admin的密码,让admin运行命令rootsudo后端。

没错。你输入admin的密码两次。

其他说明:

  • 如果您愿意,可以将第二个替换gksugksudo以减少混淆。在 Ubuntu 中,它们是等效的。(您也可以将第一个替换gksugksudo,但这会非常违反直觉且令人困惑。)
  • -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用真正的命令和它的参数替换该部分

相关内容