У меня есть настольный ПК Ubuntu 10.04 LTS с GNOME.
Как полностью отключить функции перезагрузки / выключения / приостановки / спящего режима в GNOME или даже с помощью root? Чтобы корень выдавал команду «reboot» или «pm-suspend», она ничего не делает, и машина продолжает работу. Как я могу полностью отключить эти основные «функции»?
Пользовательский доступ к этим действиям контролируется 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 кто-то решил сломать совместимость. Как указано в разделе Как отключить shutdown / reboot from 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 команд, выпущенных из графического интерфейса. Чтобы заблокировать команды перезагрузки / etc из командной строки, вы можете использовать molly-guard - как объяснено в . Как отключить shutdown / reboot из lightdm в 14.04?
Рассмотрим установку моль-предохранителя.
sudo apt-get install molly-guard
Этот пакет предотвратит непреднамеренное выключение / перезагрузку / приостановку / спящий режим, интерактивно предложив вам ввести имя хоста системы.
Тем не менее, тривиально настроить molly-guard, чтобы полностью отключить shutdown / reboot / suspend / hibernate. Просто создайте исполняемый файл на /etc/molly-guard/run.d/99-prevent-all, который имеет это в нем:
#!/bin/sh
exit 1
Обратите внимание, что он защищает только от команд, выпущенных из командной строки, выключения / reboot / suspend / hibernate, выпущенный из GUI, обходит его. Чтобы заблокировать GUI с помощью перезагрузки, вы можете использовать molly-guard .
chmod -x /usr/sbin/pm-suspend
chmod -x /sbin/reboot
chmod -x /sbin/shutdown