Linux关闭权限


8

假设您安装了一个桌面环境,例如ubuntu或debian。您可以通过以普通用户单击系统菜单上某个位置的按钮来关闭系统。您无需切换到超级用户即可完成此任务。

但是,在同一桌面环境中,如果我以普通用户身份打开终端(例如gnome-terminal),然后键入

shutdown -h now

我会被提示

shutdown: need to be root

关机的唯一方法是在命令前添加sudo。

谁能解释为什么会这样?

谢谢KC


Answers:


8

K.Chen提出的问题是:为什么从CLI进行操作时为什么需要sudo特权,但是从GUI进行操作时却不需要此类特权。

答案的第一部分是设计桌面环境的人员,例如Gnome,KDE,Xfce,Mate,Cinnamon,...试图简化用户的工作,并且他们配置关闭和重新引导而无需sudo凭据。顺便说一句,这意味着必须有一个涉及程序关闭的关闭序列,这确实需要sudo特权(无法解决)。

我不详细了解每个DE的工作方式,但是我知道有一种温和的方法可以关闭或重新启动/关闭/休眠系统,而无需root特权。您可以在Arch Linux论坛中找到原始帖子。从本质上讲,这相当于发出hese命令:

停止

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

重启

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

dbus挂起

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

冬眠的

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

我的猜测是GUI按钮大致使用这些命令。可以肯定的是,应该看一下代码,但是我相信这是一个安全的选择。


1
如果有人远程登录到同时运行桌面环境的计算机,他或她是否可以发出这些命令并成功关闭/重启/挂起/休眠?
Gerrit

这个问题有一个恶意方面,我认为应该谨慎行事。
MariusMatutiae

1
为什么恶意?如果它可以被滥用,sysops应该知道然后知道如何防止它。
Gerrit

我并不是说您是恶意的,但是可以对该信息进行恶意使用。我已经很遗憾分享了它……也许我应该做得像@Matteo
MariusMatutiae 2013年

5

该设计决定背后的原因不是技术性的(您可能shutdown在GUI中具有非特权命令或需要密码)。

  • 使用桌面环境时,应该使用户可以物理访问计算机。与允许用户按下电源按钮或拔下电源线相比,最好允许完全关机。

  • 使用外壳程序时,用户可以是远程用户,为避免远程关闭,需要更多特权。

这些不是规则,而只是基于假设的默认值:您可以在Shell中拥有本地用户,而在桌面环境中拥有远程用户。如果要选择默认行为,则可以相应地配置系统。


我明白你的意思了,@ Matteo。但是就像MariusMatutiae所说的那样,在后台,DE必须调用除“关闭”之外的某些程序才能在没有超级用户特权的情况下关闭。你有什么线索吗?
K.Chen

1

Sudo(超级用户)允许系统管理员为某些用户(或用户组)提供以root用户身份运行某些(或全部)命令的能力,同时记录所有命令和参数。shutdown -h命令或init 0命令可用于关闭计算机。但是这两个命令都需要root特权才能执行。

/ sbin中的命令必须具有root特权才能执行它。为了找到关闭命令的位置,

输入在终端中关闭的类型。

希望现在您的疑问很清楚:)

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.