Linux 关机权限

K.C*_*hen 10 linux permissions

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

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

shutdown -h now
Run Code Online (Sandbox Code Playgroud)

我会被提示

shutdown: need to be root
Run Code Online (Sandbox Code Playgroud)

关闭的唯一方法是在命令前加上 sudo。

谁能解释为什么会这样?

谢谢 KC

Mar*_*iae 8

K.Chen 提出的问题是:为什么我从 CLI 执行时需要 sudo 权限,而当我从 GUI 执行时我不需要这样的权限。

答案的第一部分是设计桌面环境的人,如 Gnome、KDE、Xfce、Mate、Cinnamon ……试图简化用户的工作,他们配置关闭和重新启动而不需要 sudo 凭据。顺便说一句,这意味着必须有一个涉及程序关闭的关闭序列,这确实需要 sudo 权限(无法绕过)。

我不知道每个 DE 是如何做的,但我知道有一种温和的方法可以关闭或重新启动/关闭/休眠您的系统,它不需要 root 权限。您可以在 Arch Linux 论坛帖子 中找到原始帖子。本质上,它相当于发出以下命令:

停止

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Run Code Online (Sandbox Code Playgroud)

重启

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Run Code Online (Sandbox Code Playgroud)

dbus 挂起

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
Run Code Online (Sandbox Code Playgroud)

休眠

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*teo 5

这个设计决定背后的原因不是技术性的(您可以shutdown在 GUI 中使用非特权命令或需要密码)。

  • 在使用桌面环境时,用户应该可以物理访问机器。然后最好允许干净关闭而不是让用户按下电源按钮或拔下电源线。

  • 使用 shell 时,用户可以是远程用户,为了避免远程关机,需要更多权限。

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