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


12

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

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


Понятия не имею? Как киоск? вы просто удалить shutdownи pm-suspendс /sbin/и/bin/
Amith KK

Эти файлы могут быть в кеше, нет? Их удаление навсегда запретит функцию перезагрузки / выключения / приостановки / гибернации даже в GNOME?
LanceBaynes

Да, вероятно, так и будет @Lance Baynes
Amith KK

Ответы:


15

Доступ пользователей к этим действиям контролируется 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 - последствия?


3
Перестал работать здесь с Ubuntu 13.10 !!!
GabrieleV

@GabrieleV Может, версия с login1 работает в 13.10? Я протестировал его в 14.04 - и, надеюсь, никто в Canonical не нарушит обратную совместимость в polkit в каждом выпуске для удовольствия.
снижение активности

В качестве еще одного пункта данных, я просто успешно использовал это на новом Ubuntu 18.04.1 LTS, чтобы запретить выключение и перезагрузку (но разрешить спящий режим и приостановку). Обратите внимание, что мне нужно было использовать эти имена 'login1'; что я также отключил 'halt' и 'halt-множественные сессии'; что я сделал это, потому что нашел эти действия в /usr/share/polkit-1/actions/org.freedesktop.login1.policy; и наконец, в пользовательском интерфейсе gdm3 в Ubuntu 18.04 кнопки в диалоговом окне подтверждения не скрыты, а просто не действуют.
MarnixKlooster ReinstateMonica

6

Подумайте об установке 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, обходит его. Для блокировки также графического интерфейса при перезагрузке можно использовать правила polkit .


Это хорошее решение для многопользовательского компьютера, где администратору необходимо выполнить работу и на некоторое время предотвратить отключение всех других пользователей.
Алексис Уилке

1
Работает с консоли, но даже с установленным molly-guard (и установленным «всегда спрашивать») выключение происходит без запроса при запуске из GNOME (3.4).
января

Да, это больше не работает ... С 13.10, может быть, 13.04.
Алексис Уилк

3

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

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

4
Можете ли вы обосновать свой ответ? Я, конечно, не думаю, что он хотел исключить возможность перезагрузки и выключения.
viyyer

Как можно снова включить гибернацию таким образом?
Ярмарка Гавриила

используйте "chmod + x", а не "chmod -x"
LanceBaynes

5
Предупреждение! Не делайте этого. Эти команды имеют символическую ссылку /bin/systemctlи удаляют из нее исполняемый бит. Это критически важный исполняемый файл, который также контролирует service SERVICE_NAME [stop|start|restart]. Ваша система, вероятно, больше не будет загружаться (если вы вообще можете отключить ее).
Даниэль Ф,

Я запустил эти команды на VPS Ubuntu. Завершите работу VPS с хоста, завершение не удалось. Это убило демона SSH. Сила остановилась и началась, может SSH просто отлично. После перезапуска /bin/systemctlустанавливается только чтение-запись-rw-r--r-- 1 root root
kryo

0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.