Jak wyłączyć zamykanie / ponowne uruchamianie / zawieszanie / hibernację?

12

Mam komputer stacjonarny Ubuntu 10.04 LTS z GNOME.

Jak mogę w pełni wyłączyć funkcje ponownego uruchamiania / zamykania / zawieszania / hibernacji w GNOME, a nawet z rootem? Aby root wydał polecenie „restart” lub „pm-suspend”, nic nie robi, a maszyna kontynuuje pracę. Jak mogę w pełni wyłączyć te podstawowe „funkcje”?

LanceBaynes
źródło
Nie wiem? Jako kiosk? po prostu usunąć shutdowni pm-suspendod /sbin/a/bin/
Amith KK
Te pliki mogą być w pamięci podręcznej, nie? Usunięcie ich na stałe zablokuje funkcję restartu / zamknięcia / zawieszenia / hibernacji nawet w GNOME?
LanceBaynes
Tak, prawdopodobnie zrobiłby to @ Lance Baynes
Amith KK

Odpowiedzi:

15

Dostęp użytkowników do tych akcji jest kontrolowany przez polkit. W szczególności odpowiadają one następującym działaniom:

  • org.freedesktop.consolekit.system.stop
  • org.freedesktop.consolekit.system.restart
  • org.freedesktop.upower.suspend
  • org.freedesktop.upower.hibernate

Wszystkie te akcje są domyślnie dozwolone dla aktywnych użytkowników lokalnych (chociaż consolekitdodatkowo ogranicza pierwsze dwa uprawnienia do działania tylko wtedy, gdy w systemie zalogowany jest pojedynczy użytkownik).

Jeśli chcesz wyłączyć te akcje, utwórz plik /etc/polkit-1/50-local.d/disable-shutdown.pklazawierający coś takiego:

[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

Powinno to uniemożliwić wykonanie tych działań. Więcej informacji na temat tych plików zasad można znaleźć, uruchamiając man pklocalauthority.

Jeśli jednak próbujesz ograniczyć root, będzie to tylko niewielka niedogodność. Z definicji rootjest to konto nieograniczone zgodnie z tradycyjnym systemem uznaniowego systemu kontroli dostępu UNIX. Jeśli nie możesz ufać użytkownikom, do których masz pełny rootdostęp, masz większe problemy niż tylko zamykanie systemu.

Zauważ, że w późniejszych wersjach Ubuntu ktoś postanowił zerwać kompatybilność. Jak odpowiedziano w Jak wyłączyć zamykanie / restart z lightdm w 14.04? wydaje się, że akcja zmieniła się na „org.freedesktop. login1 .reboot” (i tym podobne).

Na przykład w 14.04 dodając następujące wiersze jako /etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkladziała:

[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

Dodatkowo zauważ, że ta metoda blokuje wyłącznie polecenia restartu / etc wydane z GUI. Aby zablokować polecenia restartu / etc z linii poleceń, można użyć funkcji Molly-Guard - jak wyjaśniono w Wyłączanie polecenia zamknięcia dla wszystkich użytkowników, a nawet konsekwencji root?

James Henstridge
źródło
3
Przestałem tu pracować z Ubuntu 13.10 !!!
GabrieleV
@GrrieleV Może wersja z login1 działa w 13.10? Przetestowałem to w 14.04 - i mam nadzieję, że nikt w Canonical nie łamie wstecznej kompatybilności pakietu polkit w każdym wydaniu dla zabawy.
zmniejszenie aktywności
Jako kolejny punkt danych po prostu z powodzeniem użyłem tego w nowym Ubuntu 18.04.1 LTS, aby uniemożliwić zamknięcie i ponowne uruchomienie (ale zezwalanie na hibernację i zawieszanie). Zauważ, że musiałem użyć tych nazw „login1”; że wyłączyłem również „zatrzymaj” i „zatrzymaj wiele sesji”; że to zrobiłem, ponieważ znalazłem te akcje w /usr/share/polkit-1/actions/org.freedesktop.login1.policy; i wreszcie, że w interfejsie gdm3 w Ubuntu 18.04 przyciski w oknie potwierdzenia nie są ukryte, ale po prostu nie działają.
MarnixKlooster ReinstateMonica
6

Zastanów się nad zainstalowaniem Molly-Guard .

sudo apt-get install molly-guard

Ten pakiet zapobiegnie niezamierzonemu wyłączeniu / ponownemu uruchomieniu / zawieszeniu / hibernacji poprzez interaktywne monitowanie o podanie nazwy hosta systemu.

Jednak konfiguracja funkcji Molly-Guard jest banalna, aby całkowicie wyłączyć zamykanie / ponowne uruchamianie / zawieszanie / hibernację. Wystarczy utworzyć plik wykonywalny na /etc/molly-guard/run.d/99-prevent-all, który ma to w sobie:

#!/bin/sh
exit 1

Uwaga: chroni tylko przed komendami wydanymi z wiersza komend, pomijanie / restart / restart / suspend / hibernacja wydane z GUI. Aby zablokować również GUI przy użyciu restartu, można użyć reguł polkit .

Dustin Kirkland
źródło
Jest to dobre rozwiązanie dla komputera z wieloma użytkownikami, na którym administrator musi wykonać pracę i uniemożliwić na jakiś czas zamknięcie wszystkich innych użytkowników.
Alexis Wilke
1
Działa z konsoli, ale nawet z molly-guard na miejscu (i ustawionym na „zawsze pytaj”) zamknięcie przebiega bez pytania podczas inicjowania z GNOME (3.4).
stycznia
Tak, to już nie działa ... Od 13.10, może 13.04.
Alexis Wilke
3

OSTRZEŻENIE! Wymienione tutaj polecenia są niebezpieczne w użyciu. Nie używaj ich na własne ryzyko!

chmod -x /usr/sbin/pm-suspend
chmod -x /sbin/reboot
chmod -x /sbin/shutdown
LanceBaynes
źródło
4
Czy możesz uzasadnić swoją odpowiedź? Na pewno nie sądzę, że chciał wyeliminować możliwości ponownego uruchomienia i wyłączenia.
viyyer
Jak można w ten sposób ponownie włączyć hibernację?
Gabriel Fair
użyj „chmod + x” nie „chmod -x”
LanceBaynes
5
Ostrzeżenie! Nie rób tego Te polecenia są symbolicznie połączone /bin/systemctli usuwają z niego bit wykonywalny. Jest to krytyczny plik wykonywalny, który również kontroluje service SERVICE_NAME [stop|start|restart]. Twój system prawdopodobnie już się nie uruchomi (jeśli w ogóle można go zamknąć).
Daniel F
Uruchomiłem te polecenia na VPS Ubuntu. Zamknij VPS z hosta, zamknięcie nie powiodło się. Zabił demona SSH. Siła zatrzymana i uruchomiona, może SSH w porządku. Po ponownym uruchomieniu /bin/systemctlustawiony jest tylko do odczytu i zapisu-rw-r--r-- 1 root root
kryo
0

Opierając się na odpowiedzi OP, możesz to zrobić

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

Spowoduje to zmianę nazw dowiązań symbolicznych i zastąpienie ich pustymi plikami. Zapobiegnie to zamykaniu wiersza poleceń, nie wiem, czy polecenia GUI wywołują go, czy robią swoje, więc może być konieczne wykonanie również zaakceptowanej odpowiedzi.

speedstyle
źródło