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

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

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

12
задан 7 January 2012 в 16:56

4 ответа

Рассмотрите возможность установки 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 / перезагрузка / приостановка / спящий режим, выпущенный от GUI, обходит это. Для блокировки также GUI с использованием перезагрузки можно использовать правила polkit .

0
ответ дан 7 January 2012 в 16:56

ВНИМАНИЕ! Перечисленные здесь команды являются опасными для использования. Не используйте их, кроме как на свой страх и риск!

chmod -x /usr/sbin/pm-suspend
chmod -x /sbin/reboot
chmod -x /sbin/shutdown
0
ответ дан 7 January 2012 в 16:56

Доступ пользователей к этим действиям контролируется polkit. В частности, они соответствуют следующим действиям:

  • org.freedesktop.consolekit.system.stop
  • org.freedesktop.consolekit.system.restart
  • org.freedesktop.upower.suspend
  • org.freedesktop.upower.hibernate [ 1118]

Все эти действия разрешены по умолчанию для активных локальных пользователей (хотя 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» (и тому подобное). [ 1124]

Например, в 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 - последствия?

0
ответ дан 7 January 2012 в 16:56

Основываясь на ответе OP, можно сделать

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

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

0
ответ дан 23 November 2019 в 03:33

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

Похожие вопросы: