我有一台装有 GNOME 的 Ubuntu 10.04 LTS 台式电脑。
我如何才能完全禁用 GNOME 中的重启/关机/挂起/休眠功能,甚至禁用 root 权限?这样,root 发出“reboot”或“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
答案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 命令是否调用它或执行其自己的操作,因此您可能还必须执行可接受的答案。