如何禁用关机/重启/挂起/休眠?

如何禁用关机/重启/挂起/休眠?

我有一台装有 GNOME 的 Ubuntu 10.04 LTS 台式电脑。

我如何才能完全禁用 GNOME 中的重启/关机/挂起/休眠功能,甚至禁用 root 权限?这样,root 发出“rebo​​ot”或“pm-suspend”命令时,它不会执行任何操作,机器会继续运行。我如何才能完全禁用这些基本“功能”?

答案1

用户对这些操作的访问由 polkit 控制。具体来说,它们对应于以下操作:

  • org.freedesktop.consolekit.system.stop
  • org.freedesktop.consolekit.system.restart
  • org.freedesktop.upower.suspend
  • org.freedesktop.upower.hibernate

对于活跃的本地用户,所有这些操作都是默认允许的(尽管consolekit进一步限制了前两个权限,仅在单个用户登录系统时才有效)。

如果您想禁用这些操作,请创建一个/etc/polkit-1/50-local.d/disable-shutdown.pkla包含以下内容的文件:

[Disable shutdown/whatever]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.restart;org.freedesktop.upower.suspend;org.freedesktop.upower.hibernate
ResultAny=no
ResultInactive=no
ResultActive=no

这应该会阻止这些操作完成。可以通过运行 找到有关这些策略文件的更多信息man pklocalauthority

但是,如果您试图限制root,这只会造成一点不便。root根据传统 UNIX 自主访问控制系统的定义,这是一个不受限制的帐户。如果您不能信任您授予完全root访问权限的用户,那么您遇到的问题比他们关闭系统还要大。

请注意,在 Ubuntu 的后续版本中,有人决定破坏兼容性。正如在如何在 14.04 中禁用 lightdm 的关机/重启?该操作似乎已更改为“org.freedesktop。登录1.reboot” (以及类似的)。

例如在 14.04 版中添加以下几行即可/etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkla

[Disable lightdm PowerMgmt]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions;org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=no

另外请注意,此方法仅阻止从 GUI 发出的重启/等命令。要阻止来自命令行的重启/等命令,可以使用 molly-guard - 详见禁用所有用户的关机命令,甚至 root 用户 - 后果是什么?

答案2

考虑安装molly 守卫

sudo apt-get install molly-guard

该软件包将通过交互方式提示您输入系统主机名来防止意外关机/重启/挂起/休眠。

但是,配置 molly-guard 以完全禁用关机/重启/挂起/休眠功能很简单。只需在 /etc/molly-guard/run.d/99-prevent-all 创建一个包含以下内容的可执行文件:

#!/bin/sh
exit 1

注意,它只能防止命令行发出的命令,GUI 发出的关机/重启/挂起/休眠会绕过它。要使用重启阻止 GUI,可以使用政治规则

答案3

警告! 此处列出的命令是危险的使用。请勿使用这些,除非您自己承担风险!

chmod -x /usr/sbin/pm-suspend
chmod -x /sbin/reboot
chmod -x /sbin/shutdown

答案4

根据 OP 的回答,你可以这样做

for file in $(/sbin/shutdown /sbin/reboot /usr/sbin/pm-suspend); do
    mv $file $file.bak && touch $file
done

这将重命名符号链接并将其替换为空白文件。这将阻止命令行关闭,我不知道 GUI 命令是否调用它或执行其自己的操作,因此您可能还必须执行可接受的答案。

相关内容