L'accès des utilisateurs à ces actions est contrôlé par polkit. En particulier, ils correspondent aux actions suivantes:
org.freedesktop.consolekit.system.stop
org.freedesktop.consolekit.system.restart
org.freedesktop.upower.suspend
org.freedesktop.upower.hibernate
Toutes ces actions sont autorisées par défaut pour les utilisateurs locaux actifs (bien que consolekit
les deux premières autorisations ne fonctionnent plus que lorsqu'un seul utilisateur est connecté au système).
Si vous souhaitez désactiver ces actions, créez un fichier /etc/polkit-1/50-local.d/disable-shutdown.pkla
contenant quelque chose comme:
[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
Cela devrait empêcher ces actions de se terminer. Pour plus d'informations sur ces fichiers de stratégie, exécutez man pklocalauthority
.
Si vous essayez de restreindre root
cependant, ce ne sera qu'un inconvénient mineur. Par définition, root
est un compte sans restriction selon le système de contrôle d'accès discrétionnaire UNIX traditionnel. Si vous ne pouvez pas faire confiance aux utilisateurs root
auxquels vous avez accordé un accès complet , alors vous avez de plus gros problèmes qu'eux en arrêtant le système.
Notez que dans les versions ultérieures d'Ubuntu, quelqu'un a décidé de rompre la compatibilité. Comme répondu dans Comment désactiver l'arrêt / redémarrage de lightdm dans 14.04? l'action semble avoir changé en "org.freedesktop. login1 .reboot" (et similaire).
Par exemple, en 14.04, l'ajout des lignes suivantes /etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkla
fonctionne:
[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
De plus, notez que cette méthode bloque uniquement les commandes de redémarrage / etc émises depuis l'interface graphique. Pour bloquer les commandes de redémarrage / etc de la ligne de commande, on peut utiliser molly-guard - comme expliqué dans Désactiver la commande d'arrêt pour tous les utilisateurs, même root - conséquences?
shutdown
etpm-suspend
de/sbin/
et/bin/