Как отключить выключение / перезагрузку / приостановку / спящий режим?

У меня настольный ПК Ubuntu 10.04 LTS с GNOME.

Как я могу полностью отключить функции перезагрузки / выключения / приостановки / гибернации в GNOME или даже с правами root? Так что root выдает команду "reboot" или "pm-suspend", он ничего не делает, и машина продолжает работать. Как я могу полностью отключить эти основные "функции"?

4 ответа

Решение

Доступ пользователей к этим действиям контролируется 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 кто-то решил нарушить совместимость. Как ответили в Как отключить выключение / перезагрузку от lightdm в 14.04? кажется, что действие изменилось на "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

Кроме того, обратите внимание, что этот метод блокирует только команды перезагрузки /etc, выполненные из GUI. Чтобы заблокировать команды перезагрузки /etc из командной строки, можно использовать molly-guard - как описано в разделе Отключение команды выключения для всех пользователей, даже root - последствия?

Подумайте об установке Molly-Guard.

sudo apt-get install molly-guard

Этот пакет предотвратит непреднамеренное выключение / перезагрузку / приостановку / спящий режим, интерактивно предложив вам ввести имя хоста системы.

Тем не менее, очень просто настроить molly-guard для полного отключения shutdown/reboot/suspend/hibernate. Просто создайте исполняемый файл в /etc/molly-guard/run.d/99-prevent-all, в котором есть это:

#!/bin/sh
exit 1

Обратите внимание, что он защищает только от команд, выпущенных из командной строки, shutdown / reboot / suspend / hibernate, выпущенных из GUI, обходит его. Для блокировки GUI и перезагрузки можно использовать правила polkit.

ПРЕДУПРЕЖДЕНИЕ! Команды, перечисленные здесь, опасны для использования. Не используйте их, кроме как на свой страх и риск!

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

Опираясь на ответ ОП, вы можете сделать

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

Это переименовывает символические ссылки и заменяет их пустыми файлами. Это предотвратит завершение работы командной строки, я не знаю, вызывают ли команды GUI их или делают их по-своему, поэтому вам, возможно, придется также принять принятый ответ.

Другие вопросы по тегам