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.
Réponses:
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,gdm
pour 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 quegdm
vous voulez l’éteindre et qu’il peut le faire. votre nomla source
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égeracpid
, en limitant les tâches qu'ils sont autorisés à faire, même lorsqu'ils sont exécutés en tant que root.acpid
est configurable, il peut exécuter différents scripts en fonction des événements matériels qu’il voit (par exemple, jeacpid
verrouille mon ordinateur lorsque je clique sur le bouton de l’alimentation)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
dbus
cet objectif plutôt que de le faire eux-mêmes. Par exemple, les utilisations GNOMEdbus
estorg.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
lorsque le bouton d'arrêt est cliqué. Lorsque cela est envoyé,dbus
effectue 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 avecdbus
, utilisez quelque chose comme ceci:la source