Come disabilitare l'arresto / riavvio / sospensione / ibernazione?


12

Ho un PC desktop Ubuntu 10.04 LTS con GNOME.

Come posso disabilitare completamente le funzioni reboot / shutdown / suspend / hibernate in GNOME o anche con root? In modo che il root emetta il comando "reboot" o "pm-suspend" non fa nulla e la macchina continua. Come posso disabilitare completamente queste "caratteristiche" di base?


Non so? Come un chiosco? hai appena rimosso shutdowne pm-suspendda /sbin/e/bin/
Amith KK il

Quei file potrebbero essere nella cache, no? La loro rimozione impedirà permanentemente la funzione di riavvio / spegnimento / sospensione / ibernazione anche in GNOME?
LanceBaynes,

Sì, probabilmente lo farebbe @Lance Baynes
Amith KK il

Risposte:


15

L'accesso dell'utente a queste azioni è controllato da polkit. In particolare, corrispondono alle seguenti azioni:

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

Tutte queste azioni sono consentite per impostazione predefinita per gli utenti locali attivi (anche se consolekitlimita ulteriormente le prime due autorizzazioni a funzionare solo quando un singolo utente ha effettuato l'accesso al sistema).

Se si desidera disabilitare queste azioni, creare un file /etc/polkit-1/50-local.d/disable-shutdown.pklacontenente qualcosa come:

[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

Ciò dovrebbe impedire il completamento di tali azioni. Ulteriori informazioni su questi file delle politiche sono disponibili eseguendo man pklocalauthority.

Se stai cercando di limitare root, tuttavia, questo sarà solo un piccolo inconveniente. Per definizione, rootè un account senza restrizioni secondo il tradizionale sistema di controllo dell'accesso discrezionale UNIX. Se non puoi fidarti degli utenti a cui hai dato pieno rootaccesso, allora hai problemi più grandi di loro semplicemente spegnendo il sistema.

Si noti che nelle versioni successive di Ubuntu qualcuno ha deciso di interrompere la compatibilità. Come risposto in Come disabilitare l'arresto / riavvio da lightdm in 14.04? l'azione sembra essere cambiata in "org.freedesktop. login1 .reboot" (e simili).

Ad esempio in 14.04 aggiungendo le seguenti righe come /etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pklafunzionano:

[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

Inoltre, questo metodo blocca solo i comandi di riavvio / etc emessi dalla GUI. Per bloccare i comandi di riavvio / etc dalla riga di comando è possibile utilizzare molly-guard - come spiegato in Disabilitare il comando di arresto per tutti gli utenti, anche root - conseguenze?


3
Ho smesso di funzionare qui con Ubuntu 13.10 !!!
GabrieleV,

@GabrieleV Forse la versione con login1 funziona in 13.10? L'ho provato nel 14.04 - e spero che nessuno a Canonical rompa la compatibilità all'indietro in polkit in ogni versione per divertimento.
riduzione dell'attività

Come altro punto dati, l'ho appena usato con successo sul nuovo Ubuntu 18.04.1 LTS, per impedire l'arresto e il riavvio (ma consentire l'ibernazione e la sospensione). Nota che avevo bisogno di usare questi nomi 'login1'; che ho anche disabilitato 'halt' e 'halt-multiple-session'; che l'ho fatto perché ho trovato quelle azioni in /usr/share/polkit-1/actions/org.freedesktop.login1.policy; e, infine, che nell'interfaccia utente gdm3 di Ubuntu 18.04, i pulsanti nella finestra di dialogo di conferma non sono nascosti, ma semplicemente non hanno alcun effetto.
MarnixKlooster ReinstateMonica

6

Prendi in considerazione l'installazione di Molly-Guard .

sudo apt-get install molly-guard

Questo pacchetto impedirà l'arresto / riavvio involontario / la sospensione / ibernazione chiedendo interattivamente di inserire il nome host del sistema.

Tuttavia, è banale configurare molly-guard per disabilitare completamente l'arresto / riavvio / sospensione / ibernazione. Basta creare un file eseguibile su /etc/molly-guard/run.d/99-prevent-all che contiene questo:

#!/bin/sh
exit 1

Nota che protegge solo dai comandi emessi dalla riga di comando, l'arresto / riavvio / sospensione / ibernazione emesso dalla GUI lo sta bypassando. Per bloccare anche la GUI usando il riavvio si possono usare le regole polkit .


Questa è una buona soluzione per un computer multiutente in cui l'amministratore deve fare un lavoro e impedire a tutti gli altri utenti di spegnersi per un po '.
Alexis Wilke,

1
Funziona da console, ma anche con molly-guard in posizione (e impostato su 'chiedi sempre') lo spegnimento procede senza chiedere quando lo si avvia da GNOME (3.4).
gennaio

Sì, questo non funziona più ... Dal 13.10, forse 13.04.
Alexis Wilke,

3

AVVERTIMENTO! I comandi elencati qui sono pericolosi da usare. Non utilizzarli se non a proprio rischio e pericolo!

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

4
Puoi comprovare la tua risposta? Sicuramente non penso che volesse eliminare le possibilità di riavvio e spegnimento.
viyyer

Come si può riattivare l'ibernazione in questo modo?
Gabriel Fair,

usa "chmod + x" non "chmod -x"
LanceBaynes

5
Avvertimento! Non farlo Questi comandi sono collegati in modo simbolico /bin/systemctle rimuoveranno il bit eseguibile da esso. Questo è un eseguibile critico che controlla anche service SERVICE_NAME [stop|start|restart]. Probabilmente il tuo sistema non si avvierà più (se riesci a farlo arrestare).
Daniel F,

Ho eseguito questi comandi su un VPS Ubuntu. Spegnimento del VPS dall'host, arresto non riuscito. Ha ucciso il demone SSH. La forza si è fermata e iniziata, SSH può andare bene. Dopo il riavvio /bin/systemctlè impostato su sola lettura-scrittura-rw-r--r-- 1 root root
kryo,

0

Sulla base della risposta dell'OP, puoi farlo

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

Ciò rinomina i collegamenti simbolici e li sostituisce con file vuoti. Questo impedirà l'arresto della riga di comando, non so se i comandi della GUI lo chiamano o fanno le proprie cose, quindi potresti dover fare anche la risposta accettata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.