Linux关机权限

Linux关机权限

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

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

shutdown -h now

我会受到提示

shutdown: need to be root

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

谁能解释一下为什么会这样?

谢谢KC

答案1

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

重启

 #!/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 按钮大概使用这些命令。要确定,应该查看代码,但我相信这是安全的选择。

答案2

此设计决策背后的原因不是技术性的(您可以shutdown在 GUI 中使用非特权命令或要求输入密码)。

  • 当使用桌面环境时,用户应该能够物理访问机器。那么最好允许干净关机,而不是让用户按下电源按钮或拔掉电源线。

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

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

答案3

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

位于 /sbin 中的命令必须具有 root 权限才能执行。要查找关机命令的位置,

类型哪个关闭在终端。

希望现在你的疑问已经消除了:)

答案4

以 root 身份,您可以尝试在关机命令上设置粘滞位权限,如下所示:

chmod u+s /sbin/shutdown

完成后,您应该能够以具有以下权限的普通用户身份关机:

/sbin/shutdown

相关内容