Autorisation d'arrêt Linux

8

Supposons que vous installiez un environnement de bureau, par exemple ubuntu ou debian. Vous pouvez arrêter le système en cliquant sur un bouton quelque part dans le menu de votre système en tant qu'utilisateur normal. Vous n'avez pas besoin de passer en superutilisateur pour y parvenir.

Cependant, dans le même environnement de bureau, si j'ouvre un terminal (disons gnome-terminal) en tant qu'utilisateur normal, et que je tape

shutdown -h now

Je serais invité par

shutdown: need to be root

La seule façon d'arrêter est de faire précéder la commande d'un sudo.

Quelqu'un peut-il expliquer pourquoi il en est ainsi?

Merci KC

K.Chen
la source

Réponses:

8

La question posée par K.Chen est: pourquoi ai-je besoin des privilèges sudo quand je le fais depuis CLI, ahile je n'ai pas besoin de tels privilèges quand je le fais depuis l'interface graphique.

La première partie de la réponse est que les personnes qui conçoivent des environnements de bureau, comme Gnome, KDE, Xfce, Mate, Cinnamon, ... essaient de simplifier le travail de leurs utilisateurs, et configurent l'arrêt et le redémarrage sans nécessiter les informations d'identification sudo. Incidemment, cela implique qu'il doit y avoir une séquence d'arrêt qui n'implique pas l'arrêt du programme, ce qui nécessite des privilèges sudo (aucun moyen de contourner cela).

Je ne sais pas en détail comment chaque DE le fait, mais je sais qu'il existe un moyen doux d'arrêter ou de redémarrer / arrêter / mettre en veille prolongée votre système, qui ne nécessite pas de privilèges root. Vous pouvez trouver l'article d'origine dans un article du forum Arch Linux . En substance, cela revient à émettre ces commandes:

arrêt

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

redémarrer

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

dbus-suspend

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

hiberner

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

Je suppose que les boutons de l'interface graphique utilisent à peu près ces commandes. Pour être certain, il faut se pencher sur le code, mais je pense que c'est une valeur sûre.

MariusMatutiae
la source
1
Si quelqu'un se connecte à distance à une machine qui a également un environnement de bureau en cours d'exécution, peut-il émettre ces commandes et arrêter / redémarrer / suspendre / mettre en veille prolongée avec succès?
gerrit
Il y a un côté malveillant à cette question, je pense qu'une certaine discrétion devrait être exercée.
MariusMatutiae
1
Pourquoi malveillant? S'il peut être abusé, les sysops devraient savoir et ensuite savoir comment se protéger contre cela.
gerrit
Je ne dis pas que vous êtes malveillant, mais qu'une utilisation malveillante pourrait être faite de ces informations. Je regrette déjà de l'avoir partagé ... J'aurais peut-être dû faire comme @Matteo
MariusMatutiae
5

La raison de cette décision de conception n'est pas technique (vous pouvez avoir une shutdowncommande non privilégiée ou exiger un mot de passe dans l'interface graphique).

  • Lors de l'utilisation d'un environnement de bureau, l'utilisateur est censé avoir un accès physique à la machine. Mieux vaut alors permettre un arrêt propre que de laisser l'utilisateur appuyer sur le bouton d'alimentation ou débrancher le cordon d'alimentation.

  • Lors de l'utilisation d'un shell, l'utilisateur peut être un utilisateur distant et pour éviter un arrêt à distance, plus de privilèges sont demandés.

Ce ne sont pas des règles mais simplement des valeurs par défaut basées sur des hypothèses: vous pouvez avoir un utilisateur local dans un shell et un utilisateur distant avec un environnement de bureau. Si vous souhaitez choisir le comportement par défaut, vous pouvez configurer votre système en conséquence.

Matteo
la source
Je vois votre point, @Matteo. Mais comme MariusMatutiae l'a dit, sous le capot, DE a dû appeler un programme autre que "shutdown" pour un arrêt sans privilège de superutilisateur. Vous avez la moindre idée de ce que c'est?
K.Chen
1

Sudo (superutilisateur do) permet à un administrateur système de donner à certains utilisateurs (ou groupes d'utilisateurs) la possibilité d'exécuter certaines (ou toutes) les commandes en tant que root tout en enregistrant toutes les commandes et tous les arguments. La commande shutdown -h ou la commande init 0 peut être utilisée pour éteindre la machine. Mais les deux commandes nécessitaient le privilège root pour s'exécuter.

La commande qui localise dans / sbin doit avoir le privilège root pour l'exécuter. Pour trouver l'emplacement de la commande d'arrêt,

tapez quel arrêt dans le terminal.

J'espère que votre doute est clair :)

Unnikrishnan
la source