Як відключити вимкнення / перезавантаження / призупинення / сплячку?


12

У мене є настільний ПК Ubuntu 10.04 LTS з GNOME.

Як я можу повністю відключити функції перезавантаження / вимкнення / призупинення / сплячки в GNOME або навіть з root? Так що корінь видає команду "перезавантажити" або "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

Крім того, зауважте, що цей метод блокує виключно перезавантаження / тощо команди, видані з GUI. Для блокування команд перезавантаження / тощо з командного рядка можна використовувати molly-guard - як пояснено в команді "Відключення команди відключення" для всіх користувачів, навіть root - наслідки?


3
Перестала працювати тут з Ubuntu 13.10 !!!
GabrieleV

@GabrieleV Можливо, версія з login1 працює в 13.10? Я перевірив це в 14.04 - і, сподіваємось, ніхто в компанії Canonical не порушує зворотну сумісність у polkit у кожному випуску для задоволення.
зменшення активності

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

6

Подумайте про встановлення molly-guard .

sudo apt-get install molly-guard

Цей пакет запобігає ненавмисному відключенню / перезавантаженню / призупиненню / сплячому режиму, інтерактивно спонукаючи вас ввести ім'я хоста системи.

Однак налаштовувати molly-guard доцільно, щоб повністю відключити вимкнення / перезавантаження / призупинення / сплячку. Просто створіть виконуваний файл на /etc/molly-guard/run.d/99-prevent-all, який має в ньому:

#!/bin/sh
exit 1

Зверніть увагу, що він захищає лише від команд, виданих з командного рядка, обхід / перезавантаження / призупинення / сплячий режим, виданий з графічного інтерфейсу, обходить його. Для блокування також GUI за допомогою перезавантаження можна використовувати правила polkit .


Це хороше рішення для багатокористувацького комп’ютера, де адміністратору необхідно виконати роботу і не допустити відключення всіх інших користувачів на деякий час.
Алексіс Вільке

1
Працює з консолі, але навіть з молі-захистом на місці (і встановлено "завжди просити") відключення триває, не запитуючи при ініціюванні його від 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]. Ваша система, ймовірно, більше не завантажиться (якщо ви взагалі зможете її відключити).
Даніель Ф

Я запускав ці команди на ubuntu VPS. Вимкнення 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.