Linux 下关机/重启是否需要 root 权限?

Linux 下关机/重启是否需要 root 权限?

为什么我需要以 root 身份从终端关闭/重启计算机?通过 GUI 菜单执行此操作不需要 root 权限。

答案1

通常,操作系统会在启动时启动一个以 root 身份运行的服务,并为桌面环境提供一些与计算机相关的功能。通常是 ConsoleKit 或 systemd-logind。

例如在 KDE 中你可以从命令行关闭你的计算机普通的用户使用类似以下内容的内容:

qdbus org.kde.ksmserver /KSMServer logout 0 0 0

这是可能的,因为 KDE 会话管理器将联系以 root 身份运行的 DBus 服务,并且在调用时将以shutdownroot 权限运行命令。

在运行 ConsoleKit 的系统上,您可以使用:

gdbus call -y -d org.freedesktop.ConsoleKit \
              -o /org/freedesktop/ConsoleKit/Manager \
              -m org.freedesktop.ConsoleKit.Manager.Stop

在使用的系统上systemd-logind,该shutdown实用程序已经使用 DBus 并且不需要权限。

总而言之,您可以以普通用户身份关闭计算机,因为桌面环境运行一项服务,该服务提供了以 root 身份运行关机[1]命令的可能性。

[1] 实际上该服务还执行其他操作来确保桌面环境正确关闭。

答案2

假设您的计算机是一台共享的 Web 托管服务器,其中每个用户都被授予 SSH 访问权限。在这种设置下,每台服务器大约有 500 个用户。

是否真的有人被允许重启整个服务器、中断 HTTP 下载、中断 SSH 会话等?

答案3

我认为的一些原因:

  • 命令行变体可以是可编写脚本,因此恶意脚本可能会被注入并导致非常严重的后果(DoS 攻击等)。
  • GUI 菜单是安全的:不允许发生令人讨厌的事情(例如强制重启 - 将一切都抛诸脑后)
  • GUI 菜单很简单:不会让用户对强大的管理选项感到困惑,例如详细日志记录、向所有登录用户发送可选消息、延迟关机、暂停差异、维护模式等。
  • GUI 菜单简洁明了:不会根据系统运行级别(0、6 等)执行不同的脚本(例如 /sbin/shutdown)和/或根据从命令行输入的不同开关/选项“不同地”工作

高血压

答案4

除了 GUI 菜单之外,您还可以从文本控制台关闭 Linux。它与 GUI 的共同点在于,发出命令的用户几乎肯定具有物理访问权限。(对于不具备物理访问权限的特殊情况,例如公共信息亭,可以禁用它。)

不能假定任意 TTY 会话的用户具有物理访问权限;它是一种远程访问形式。无法通过任意 TTY 会话发出关机信号,无论是本地 xterm、串行线路上的实际终端还是 ssh 会话。您必须通过成为 root 来证明您具有与物理访问权限相同的权限。

如果未经身份验证或无特权的用户可以远程重启系统,那将会是一个安全问题。

就像远程登录一样,物理终端(实际串行端口)也是一种远程访问形式。用户可以在另一栋建筑中,也可以在世界的另一个地方(通过调制解调器)。

图形终端仿真器(如 xterm)不是远程的,但操作系统不知道这一点。该应用程序使用伪 TTY。这是一个虚拟化的 TTY 设备,操作系统(大多数情况下)不会将其与真实 tty 区分开来。如果您stty在 xterm 或 ssh 会话中输入,您会注意到您有一个波特率,如 9600 或 38400,并且可以切换 xon/xoff 流量控制,甚至 cts/rts。伪 TTY可以理论上,在主从之间有一个特殊的重启信号协议,而常规 TTY 则没有这种协议,但实际上并没有。(实际上,xterm 可以是远程的,因为它是一个 X 客户端应用程序,可以重定向到远程 X 服务器上创建其窗口。)

(不确定问题中的“终端”指的是什么;Linux 中没有这样的东西。)

相关内容