在没有root权限的情况下,电源按钮如何关闭计算机?

amy*_*sin 35 shutdown root gui

当我尝试从命令行或终端关闭计算机时,我必须具有 root 权限:

amy@amy:~$ shutdown now
shutdown: Need to be root
Run Code Online (Sandbox Code Playgroud)

和

amy@amy:~$ halt
halt: Need to be root
Run Code Online (Sandbox Code Playgroud)

但是当使用图形用户界面(即关机按钮或硬件关机按钮)关机时,我不需要输入密码。图形界面的关闭是什么,为什么它不需要密码或 root 权限?

我正在使用 Ubuntu 11.04 Natty。

Mic*_*zek 33

硬件电源按钮触发 ACPI 事件acpid(ACPI 守护程序)注意到并做出反应;在这种情况下,通过关闭系统,尽管您可以让它为所欲为。ACPI 守护程序以 root 身份运行,因此它有权关闭系统。桌面环境(例如gdmGnome)通常也以 root 身份运行,所以我怀疑它们的工作方式相同——您无权关闭系统,但您可以告诉gdm您希望它关闭并且它可以在代表你

  • @amyassen 如果有人可以物理访问您的机器,那么担心安全性为时已晚-如果电源按钮没有触发正常关机,他们只需拉动电源线并导致*不正常* 关机。 (9认同)
  • 要让 `acpid` 做一些不同于它已经做的事情,你必须是 root,所以你已经有权做不安全的事情。也可以使用像 SELinux 这样的 MAC 系统来保护 `acpid`,限制它们被允许做的事情,即使它们以 root 身份运行。 (7认同)
  • @amyassin 好吧,要更改它,您需要 root 权限;普通用户无法告诉它该做什么。但是 `acpid` 是可配置的,它可以根据它看到的硬件事件运行不同的脚本(例如,当我按下电源按钮时,我有 `acpid` 锁定我的计算机) (5认同)
  • 所说的“恶意软件”必须获得 root 所有权和 SUID 权限才能告诉 init 进行关闭——同样,当它到达那个点时,您需要担心的问题比可能的关闭更大。 (3认同)

Chr*_*own 11

Michael 的回答正确地讨论了使用硬件电源开关时的系统功能,但大多数桌面环境实际上dbus用于此目的而不是自己做。例如,GNOME在单击关闭按钮时使用dbus's org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown。dbus发送此消息时,会进行一些检查以确定发送消息的用户是否有权执行关闭操作,如果是,则关闭系统。

您可以使用dbus-send. 例如,要使用 关闭系统dbus,请使用以下内容:

dbus-send --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Run Code Online (Sandbox Code Playgroud)