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