Comment le bouton d'alimentation permet-il d'éteindre l'ordinateur sans autorisation root?

36

Lorsque j'essaie d'éteindre l'ordinateur à partir d'une ligne de commande ou d'un terminal, je dois disposer des privilèges root:

amy@amy:~$ shutdown now
shutdown: Need to be root

et

amy@amy:~$ halt
halt: Need to be root

mais lors de la fermeture à l'aide de l'interface utilisateur graphique, c'est-à-dire du bouton d'arrêt ou du bouton d'arrêt du matériel, je ne suis pas invité à saisir le mot de passe pour le faire. Qu'est-ce que cet arrêt pour l'interface graphique et pourquoi il n'a pas besoin du mot de passe ou des privilèges root?

J'utilise Ubuntu 11.04 Natty.

amyassin
la source
1
car si un attaquant a un accès physique à votre ordinateur, vous l'avez déjà perdu. Essayer d'empêcher quelqu'un qui se trouve à portée de main de faire quelque chose, c'est au mieux une tactique dilatoire qui provoque généralement plus d'inconvénients pour les utilisateurs quotidiens que pour les attaquants. La plupart des distributions Linux vous donneront une invite root si vous leur parlez avec sévérité pendant le démarrage pour exactement cette raison.
Joseph Rogers

Réponses:

33

Le bouton d'alimentation du matériel déclenche un événement ACPI que acpid(le démon ACPI) remarque et réagit. dans ce cas, en arrêtant le système, même si vous pouviez le faire faire ce que vous voulez. Le démon ACPI s'exécute en tant qu'utilisateur root. Il est donc autorisé à arrêter le système. Les environnements de bureau (par exemple, gdmpour Gnome) fonctionnent généralement aussi en tant que root. Je suppose donc qu'ils fonctionnent de la même manière: vous n’avez pas l’autorisation d’arrêter le système, mais vous pouvez dire que gdmvous voulez l’éteindre et qu’il peut le faire. votre nom

Michael Mrozek
la source
est-ce sécurisé ?? vous pouvez le faire faire ce que vous voulez.
Amyassin
7
Pour arriver acpidà faire quelque chose de différent de ce qu'il fait déjà, vous devez être root, vous devez donc déjà avoir la permission de faire des choses non sécurisées. Il est également possible d'utiliser des systèmes MAC tels que SELinux pour protéger acpid, en limitant les tâches qu'ils sont autorisés à faire, même lorsqu'ils sont exécutés en tant que root.
Warren Young
5
@amyassin Eh bien, pour changer ce que vous faites, vous avez besoin de privilèges root. un utilisateur normal ne peut pas lui dire quoi faire. Mais il acpidest configurable, il peut exécuter différents scripts en fonction des événements matériels qu’il voit (par exemple, je acpidverrouille mon ordinateur lorsque je clique sur le bouton de l’alimentation)
Michael Mrozek
7
@amyassen Si quelqu'un a un accès physique à votre machine, il est trop tard pour se préoccuper de la sécurité. Si le bouton d'alimentation ne déclenche pas un arrêt progressif, il peut simplement tirer le cordon d'alimentation et provoquer un arrêt inopiné .
Shadur
3
Ce 'logiciel malveillant' devrait obtenir la propriété racine et les autorisations SUID afin de permettre à init de procéder à l'arrêt - et encore une fois, à ce stade, vous aurez plus de problèmes à vous inquiéter qu'un éventuel arrêt.
Shadur
11

La réponse de Michael décrit correctement le fonctionnement du système lors de l'utilisation du commutateur d'alimentation matériel, mais la plupart des environnements de bureau utilisent dbuscet objectif plutôt que de le faire eux-mêmes. Par exemple, les utilisations GNOME dbusest org.freedesktop.Hal.Device.SystemPowerManagement.Shutdownlorsque le bouton d'arrêt est cliqué. Lorsque cela est envoyé, dbuseffectue certaines vérifications pour déterminer si l'utilisateur qui envoie le message est autorisé à effectuer un arrêt et, le cas échéant, il ferme le système.

Vous pouvez émuler ceci en utilisant dbus-send. Par exemple, pour arrêter votre système avec dbus, utilisez quelque chose comme ceci:

dbus-send --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Chris Down
la source