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


33

我定义了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

所以问题是:为什么要用这种方式配置系统?您认为它可以提高安全性吗?它不是:)而是,您可以在“ admin”帐户上配置自动登录,因此登录时不会要求您输入密码-执行管理任务时仍需要密码。
谢尔盖(Sergey)2012年

5
@Sergey如果normaluser有时由本不应该以其身份运行命令的人使用root,那么让normaluser非管理员身份肯定可以提高安全性。给某人一个用户帐户但不让他们知道自己的密码的危险远远超出了鲍里斯在麻烦和复杂性方面的情况。如果您想全面解释为什么会出现问题,建议您提出一个新问题,但是其中三个原因是用户应该能够锁定和解锁屏幕,使用其他会话类型注销并重新登录,以及解密ecryptfs数据。
伊莱亚·卡根

2
确切地说,对我而言,使用我家人的PC让所有人都知道管理员密码来解锁屏幕是没有意义的。这normaluseradminuser设置是黄金法则。
鲍里斯(Boris)

1
公平地说,我给人留下的印象是,OP正在使用该normaluser帐户进行日常工作并使用该admin帐户来执行管理任务,但这并没有真正改善。在多用户计算机上,这完全有意义。
谢尔盖

Answers:


5

PAM可以照顾好它

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

把线:

session optional pam_xauth.so

在某处:

/etc/pam.d/su

和/或

/etc/pam.d/sudo

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


确认这也适用于Kubuntu 16.04。谢谢!
akhmed

谢谢,它对我也适用于18.04!它似乎是最好的替代方法sux并且gksu现在不再可用。
鲍里斯

29

术语

在这个答案中:

  • normaluser是谁不是管理员,而不能作为运行命令的普通用户root使用sudo
  • admin是谁能够为运行命令的管理员rootsudo。(当然,任何图形命令都应使用gksu/gksudo而不是sudo直接使用图形前端。)
  • anyapplicationnormaluser要作为运行的图形应用程序的名称rootnormaluser知道admin的密码,并且(大概)已经告知他(他)可以将其用于此目的。

问题

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

  • gksu可以配置为使用sudo su作为其后端。的默认行为gksu在Ubuntu是充当一个前端sudosu。也就是说,默认情况下,gksu和的gksudo行为完全相同。请参阅联机帮助页
  • normaluser不是管理员,因此不能作为运行命令rootsudosudo提示输入运行它的用户的密码,而不是他们想要成为用户的密码。如果您不是管理员,则无法使用密码来执行操作,这意味着您不是管理员
  • normaluser,只要它不是一个来宾帐户, 可以运行为其他用户的命令su,将在其他用户的密码。但是,gksu作为一个前端sudo,没有su
  • normaluser不能直接运行任何命令root,因为normaluser无法使用sudo,并且没有人可以成为rootsu因为没有root密码

解决方案

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

  • normaluser必须成为admin运行图形命令。要做到这一点,normaluser必须运行gksu-w标志,使其运行在SU-模式,而不是默认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-mode是默认设置。
  • 您可能需要先使用一些非常无害的命令对其进行测试,以确保它可以满足您的要求。(可以,但是不需要您信任我。)例如:
    gksu -w -u admin gksu xclock
    xclock 是一个很好的简单时钟窗口应用程序。

1
完美,我立即在.bashrc中添加了一个别名,以避免忘记这个聪明的技巧
Boris

不知道为什么,但是现在(使用ubuntu 14.04)我必须首先sudo使其生效。范例:sudo gksu -w -u thedude gksu xclock
Boris

仅供参考:kdesudo看起来至少在KUbuntu上更清洁。
MDTech.us_MAN

不幸的是,似乎gksu不再可用
Boris

11

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

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

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

sux admin
gksu xclock

3
有没有更多的版本sux在Ubuntu 14.04 64位;(
鲍里斯

2
似乎还有其他选择
Boris

@Boris这是一个shell脚本,您可以从一个历史性的仓库中下载它,并放在您的路径中,例如从packages.debian.org/source/wheezy/sux
没人

2

可执行文件

除了kdesudo和gksu之外pkexec,还有一种无处不在的替代方法- 它来自policykit-1许多软件包所需的软件包。


我建议扩大这个答案,解释了为什么一个普通用户(谁是不是管理员,并且不能成为根用sudo或polkit),谁知道管理员(即,人谁的密码可以成为root用sudo或polkit),可以使用pkexec到以root身份运行图形程序。这就是这里的问题。目前尚不清楚,我认为pkexec会做到这一点,至少在没有广泛编辑配置文件,特别是因为pkexec一般不能用来运行任意图形程序(不polkit配置文件)在所有。有办法吗?
伊利亚·卡根

@EliahKagan这可以在默认配置下的Ubuntu上运行-只需运行即可pkexec command。该配置位于/usr/share/polkit-1/actions/org.freedesktop.policykit.policy由命名软件包安装的文件中。它实际上只要求您只写一次管理员密码
pqnet

0

代替

苏管理员
gksu anyapplication ...

我建议您尝试gksu -u admin anyapplication,在此您可以使用gksu命令本身来完成所有操作。另外请注意,您必须输入命令中提到的用户密码,在这种情况下,您必须输入admin的密码。


1
在默认配置的Ubuntu系统上,如果normaluser运行gksu -u admin anyapplication,它将提示输入 normaluser密码admin使用sudo后端,就像gksu anyapplication提示输入normaluser密码root使用sudo后端一样。两者都会因相同的原因normaluser而失败- 不能使用来运行命令sudo
伊利亚·卡根

-1

这是完成此操作的命令。

gksu app-name

运行它没有运行su第一。您只需要在普通用户会话中运行上述命令,该应用程序将以root用户身份运行。


1
它不起作用-请注意,我正在从没有特权的用户会话中尝试
Boris

错误消息是什么?
沙洛爵士(SirCharlo)

输入我的normal用户密码-我收到消息“无法以root用户身份启动”
Boris

输入我的superuser/admin密码-我收到消息“密码错误,请重试”
鲍里斯(Boris)

-1

您应该使用:

gksudo AppName

这首先会提出一个图形密码请求(您用户的密码),然后以root用户身份启动GUI应用程序(我确实尝试过,确实如此。可笑的事情:gksu AppName此后我立即尝试了,而且效果很好-确实如此)可能应该这样,正如“ gk”前缀所暗示的。因此,我不确定您的问题可能在哪里。


1
它适用于您的情况,因为您已尝试使用sudo权限从管理员用户会话进行尝试。没有sudo权限的非管理员用户会话怎么办?
鲍里斯(Boris)

我从非管理员用户(我自己的用户)的普通终端窗口中使用了gksudo。但是,您第二次尝试是正确的,因为那时我仍然有sudo烫发。但是鲍里斯(Boris)的问题不同:他的应用无法连接到X,在我看来,这两次都起作用。从原始问题可以看出,sudo在文本模式下,他正在工作。
Izzy 2012年

-1

只有一个超级用户,并且是超级用户。

用户1是管理员,具有sudo权限。
用户2不是管理员,没有sudo权限。

尝试以用户1身份登录,然后使用以下命令

gksudo app-name  

(用应用名称替换应用名称)
希望对您有所帮助-让我知道。:o)

编辑:根据要求提供更多信息

如果只是您在计算机上,
那么使用用户1(有权使用sudo)
与使用用户2(没有许可使用sudo)没什么不同。
用户1具有与用户2相同的权限。
除非用户1发出以sudo开头的命令和/或提供其密码以允许应用程序以root特权运行。
唯一的区别是用户2无法以root用户身份运行应用程序。

希望对您有所帮助。:o)


感谢超级用户和管理员之间的澄清,我将编辑我的问题。“以用户1身份登录” =>打开与用户1的会话是什么意思?那正是我要避免的。
鲍里斯(Boris)2012年

添加了更多信息以按要求回答:o)
Fernhill Linux Project 2012年

好吧,我的妻子和我的孩子正在使用user2和自动登录功能,所以我宁愿不对该用户使用sudo权限。
鲍里斯(Boris)2012年

听起来是个好主意-我也有孩子; o)。您是否尝试过以user1身份登录并运行命令?
Fernhill Linux项目

1
是的,我可以,但是更改用户会话很痛苦。我通常必须执行几次:进入管理会话以定义一些设置,切换到普通用户会话进行测试,一次又一次地能够在正常会话中进行操作非常好。在大多数情况下,我会使用su admin+ sudo ...示例来处理它sudo vi file,但使用GUI的应用程序除外
Boris
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.