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


12

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

如何完全禁用GNOME中的重启/关机/挂起/休眠功能,甚至连root也禁用?这样,根发出“ reboot”或“ pm-suspend”命令后,它什么也不做,机器继续运行。如何完全禁用这些基本“功能”?


我不知道?作为报亭?你只是删除shutdown,并pm-suspend/sbin//bin/
Amith KK

这些文件可能在缓存中,不是吗?即使在GNOME中,删除它们也将永久禁止重新启动/关闭/挂起/休眠功能。
LanceBaynes 2012年

是的,它可能会这样做@Lance Baynes
Amith KK 2012年

Answers:


15

用户对这些操作的访问由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。login1 .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发出的reboot / etc命令。要从命令行阻止重新启动/ etc命令,可能会使用molly-guard(如对所有用户(甚至包括root用户)禁用shutdown命令中所述)的后果?


3
停止在此处使用Ubuntu 13.10!
GabrieleV 2014年

@GabrieleV也许具有login1的版本可在13.10中使用?我在14.04中进行了测试-希望Canonical的每个发行版都不会破坏polkit中向后兼容的乐趣。
减少活动

作为另一个数据点,我刚刚在新的Ubuntu 18.04.1 LTS上成功使用了此功能,以禁止关机和重新启动(但允许休眠和挂起)。注意,我需要使用这些“ login1”名称。我还禁用了“暂停”和“暂停多个会话”;之所以这样做,是因为我在/usr/share/polkit-1/actions/org.freedesktop.login1.policy中找到了这些操作;最后,在Ubuntu 18.04的gdm3 UI中,确认对话框中的按钮并未隐藏,但它们根本没有作用。
MarnixKlooster恢复状态莫妮卡

6

考虑安装molly-guard

sudo apt-get install molly-guard

该软件包将以交互方式提示您输入系统的主机名,以防止意外的关机/重新引导/挂起/休眠。

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

#!/bin/sh
exit 1

请注意,它仅能防止从命令行发出的命令,GUI发出的shutdown / reboot / suspend / hibernate绕过了它。要使用重新启动来阻止GUI,可以使用polkit规则


对于多用户计算机来说,这是一个很好的解决方案,在该计算机中管理员需要执行工作并防止所有其他用户暂时关闭。
Alexis Wilke

1
可从控制台运行,但即使在安装了molly-guard(并将其设置为“始终询问”)的情况下,关闭继续进行时也不会询问从GNOME(3.4)启动它的时间。
1

是的,这不再起作用了……从13.10开始,也许是13.04。
亚历克西斯·威尔克2014年

3

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

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

4
你能证实你的答案吗?我当然不认为他想消除重新启动和关闭的可能性。
viyyer 2012年

这样一来如何重新启用休眠模式?
加百利博览会

使用“ chmod + x”而不是“ chmod -x”
LanceBaynes'2

5
警告!不要这样做这些命令是符号链接的,/bin/systemctl并且将从其中删除可执行位。这是一个重要的可执行文件,它也可以控制service SERVICE_NAME [stop|start|restart]。您的系统可能不再启动(如果您可以使其完全关闭)。
Daniel F

我在ubuntu VPS上运行了这些命令。从主机关闭VPS,关闭失败。它终止了SSH守护程序。强制停止并启动,可以正常使用SSH。重新启动后/bin/systemctl设置为只读-rw-r--r-- 1 root root
-kryo

0

基于OP的答案,您可以执行

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.