Question Pourquoi avons-nous besoin d'être connecté au terminal pour arrêter et redémarrer?


Lorsque nous installons / supprimons / mettons à jour des packages ou apportons des modifications nécessitant des privilèges d’administrateur, nous sommes invités à saisir le mot de passe de l’utilisateur admin sudo privilèges - cela se produit à la fois via l'interface graphique et le terminal.

prompt via gui

Cependant, si nous essayons d’arrêter et de redémarrer via un terminal, nous nous plaignons root:

$ reboot
reboot: Need to be root

$ shutdown now
shutdown: Need to be root

Mais on ne nous demande jamais un mot de passe lorsque nous effectuons ces actions via la roue dentée en haut à droite.

cog-wheel menu

Pourquoi y a-t-il cet écart?


60
2017-10-19 18:02


origine


Bonne question .. Vous savez ce que j'allais demander la même chose. Mon scénario consistait à arrêter Ubuntu avec des raccourcis. Je, e quand jamais j'appuie sur une touche assignée comme ctrl + super + s il exécute la commande sudo shutdown -h now mais le problème était que sans l'autorisation d'accès à shutdown ça ne marche jamais .. Parce que où / comment va-t-il demander au mot de passe d'entrer après avoir appuyé sur la touche de raccourci .. J'espère que vous comprendrez ma situation .. :) - Saurav Kumar
voir également: askubuntu.com/questions/1190/… - Takkat
Voir également: unix.stackexchange.com/questions/18503/… - amyassin


Réponses:


L'arrêt de la roue dentée vérifie si vous êtes autorisé à arrêter la machine. Cela se fait via PolicyKit. En cas d'arrêt de cette déclaration dans le fichier /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy est vérifié:

<action id="org.freedesktop.consolekit.system.stop">
  <description>Stop the system</description>
  <message>System policy prevents stopping the system</message>
  <defaults>
    <allow_inactive>no</allow_inactive>
    <allow_active>yes</allow_active>
  </defaults>
</action>

Le PolicyKit déclenche un dbus-send commander. En cas d'arrêt ce serait:

dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

Un démon s'exécute en arrière-plan avec des privilèges root qui invoquent la commande shutdown pour vous.

Lorsque vous voulez pouvoir éteindre la machine "à l'ancienne" via la ligne de commande (shutdown, reboot, halt, ...), alors vous devez ajouter le suid-Bit à ces commandes. Mais sachez que tout le monde sur votre système, qui a accès au shell, peut alors arrêter votre machine.


48
2017-10-19 18:46



Une option légèrement plus sûre consisterait à autoriser la fermeture sans mot de passe de sudoers, etc. sudo visudo, ajouter %sudo ALL = NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/halt, /sbin/reboot, sauvegarder et quitter. De cette façon, un redémarrage en ligne de commande nécessitera toujours sudo reboot, mais vous n'aurez pas à entrer votre mot de passe. - Sebastian Thürrschmidt


Ubuntu est une distribution du système GNU / Linux Operationg qui à son tour appartient à la famille de systèmes Unix - une architecture commune à plusieurs systèmes d’exploitation modernes.

Traditionnellement, Unix fonctionnait sur des ordinateurs centraux. Des installations informatiques centrales qui desservent des dizaines ou des centaines d'utilisateurs via des terminaux distants. Tous les utilisateurs étant tributaires de la disponibilité de l’ordinateur central, aucun utilisateur n’était autorisé à émettre une commande d’arrêt. Une idée fondamentale pour l'architecture Unix: le noyau du système n'initialisera jamais un arrêt à moins que la fonction correspondante ne soit appelée par un processus de superutilisateur.

Dans les systèmes de bureau contemporains, les développeurs ont dû faire certains efforts pour rendre l’arrêt accessible au simple utilisateur de bureau. Une technique courante consiste à laisser le gestionnaire de connexion, qui s'exécute généralement dans le contexte de sécurité de l'utilisateur root, gérer l'arrêt et le redémarrage. Dans ce cas, le shell graphique envoie une requête au gestionnaire de connexion pour arrêter l'ordinateur. Cela implique l'utilisation de la communication inter-processus (IPC), généralement via le service dbus.

Le kit de règles mentionné ci-dessus étend ce processus en fournissant un cadre standardisé grâce auquel le gestionnaire de connexion (ou tout autre programme fournissant le service d’arrêt) peut vérifier quels utilisateurs sont autorisés à provoquer un arrêt et par lequel un administrateur peut configurer ces autorisations.

Certains environnements de bureau n'utilisent pas les services basés sur IPC, mais plutôt un ensemble de programmes d'aide pour fournir les mêmes fonctions ou des fonctions similaires. Ces programmes d'aide seraient appelés par des mécanismes, permettant de changer dans le contexte du super-utilisateur, comme sudo, suid ou un mécanisme similaire à sudo.

Dans tous les cas, le programme d'arrêt traditionnel muet sur le shell ne fonctionne pas de cette façon. Il vous oblige à voir qu'il est exécuté dans un contexte de superutilisateur.


27
2017-10-19 19:29





Parce que Linux est couramment utilisé comme serveur ou similaire, et que SSHing dans un boîtier Linux, même un ordinateur portable Ubuntu normal, est assez courant.

En fait, il se peut que vous ne souhaitiez pas que les personnes disposant d'un accès SSH puissent l'arrêter, en particulier lorsque d'autres utilisateurs connectés à distance peuvent l'utiliser. Quelqu'un ayant accès à l'interface graphique - eh bien, il peut l'éteindre tout seul avec le bouton d'alimentation physique.

De plus, un utilisateur connecté à distance ne pourra pas le réactiver.


14
2017-10-20 00:43



Je ne me suis pas posé la question à ce moment-là, mais je suppose que ce sont des options dans Ubuntu pour installer des packages d'interface graphique sur un serveur distant et utiliser le serveur distant via l'interface graphique plutôt que la ligne de commande. (Similaire au fonctionnement de Windows Remote Desktop ou de Teamviewer). Cela invaliderait donc l’hypothèse selon laquelle une personne utilisant Ubuntu via une interface graphique peut s’arrêter avec le bouton d’alimentation physique. - Aditya
@aditya qui a besoin du serveur configuré de cette manière, que l'administrateur doit décider de faire - Manishearth
Oui. Cela nécessiterait des privilèges root pour pouvoir installer les packages et les configurer si nécessaire. Mais ce scénario m’a rappelé en lisant votre réponse hier et je pensais le partager avec vous :-) - Aditya


Lorsque je redémarre via l'interface graphique, je peux le faire sans mon sudo mot de passe.

Seulement si vous êtes le seul connecté. S'il y a d'autres utilisateurs (y compris les utilisateurs de la console), vous devrez peut-être entrer un mot de passe root. C'est la même chose avec OS X et les versions plus récentes de Windows.

Pourquoi donc? Que se passe-t-il en interne du système ubuntu?

La commande suivante:

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

D-Bus est un mécanisme IPC - un support de communication local entre les processus exécutés sur le même hôte.

D-Bus est "plus intelligent" que les protocoles de transmission de messages de bas niveau tels que UDP. D'autre part, il transporte des messages en tant qu'éléments discrets, et non des flux de données continus.

D-Bus a une vue structurée des données qu’il transporte et traite les données sous forme binaire; nombres entiers de différentes largeurs, chaînes, etc. Comme les données ne sont pas simplement des "octets bruts" à D-Bus, les messages peuvent être validés.

- Bureau gratuit

Pourquoi le shutdown commande juste vérifier si quelqu'un est connecté? Cela semble être une caractéristique non-mercenaire pour être honnête. Je peux imaginer que cela permettrait de gagner du temps parfois, mais une console cohérente est souvent préférée. Je ne veux pas que les commandes parfois exiger un mot de passe après l'avoir exécuté, et parfois pas.


14
2018-02-07 01:58



Il existe également une version plus courte via l'application qdbus - Sergiy Kolodyazhnyy
Lors de la fermeture / déconnexion d'un DE (GNOME dans ce cas), je ne suis pas invité pour la racine / utilisateur sudo mot de passe ni avec un autre utilisateur connecté via GDM ni avec un autre utilisateur connecté via tty. - kos
@kos hu, c'est étrange. Cette capture d'écran est de Gnome 3, et je suis connecté sur gui et tty - Tim
Je veux dire que je reçois le même message, mais si vous cliquez sur "Éteindre", le système est arrêté. J'ai aussi demandé à Fabby de le tester et il fait de même pour lui, pas sûr de savoir de quoi il s'agit. - kos
@kos ohh. Hu accroche toi. - Tim


La raison pour laquelle vous n'avez pas besoin d'être root pour lancer un arrêt à partir de l'interface graphique est en grande partie une question de commodité pour l'utilisateur de bureau typique. Le système sait Si vous êtes l'utilisateur connecté à la console, si vous fermez l'ordinateur par erreur, vous pouvez probablement le réactiver.

Pour un utilisateur du shell, vous pourriez très bien être connecté à distance, le système exige donc que vous soyez connecté en tant que root pour pouvoir émettre une commande d'arrêt. Cela empêche un utilisateur régulier connecté à un serveur de l'éteindre pendant que d'autres personnes l'utilisent, et même s'il n'y a pas nécessairement quelqu'un physiquement pour démarrer l'ordinateur.

La raison pour laquelle shutdown ne fournit pas une invite graphique pour le mot de passe super-utilisateur est probablement qu'il n'y a aucun utilitaire réel à gagner - si vous êtes sur la console, où l'invite apparaît, vous pouvez simplement utiliser le cog- wheeel menu à la place. Si vous souhaitez avoir une invite de ligne de commande pour le mot de passe superutilisateur pour l'arrêt, c'est déjà disponible avec "sudo shutdown".


9
2017-10-19 19:35





Dans un système multi-utilisateurs, la dernière chose que vous voulez est que vos utilisateurs se connectent et puissent redémarrer le serveur de manière aléatoire à tout moment. La version en ligne de commande de Reboot est donc une commande de super-utilisateur. avoir des droits sudo.

Idem les commandes Halt et PowerOff aussi.


5
2018-02-07 01:38



Merci pour votre réponse, je comprends qu'en tant qu'utilisateur d'une machine utilisée par des dizaines, je ne devrais pas pouvoir redémarrer la machine, mais que fait Ubuntu (ou à peu près toutes les distributions du bureau) lorsque je choisis de redémarrer avec la souris? au lieu du clavier? Ils permettent cela sans priveliges. - asco
Des composants tels que systemctl, loginctl, systemd, les stratégies système, etc. permettent à l'utilisateur actuellement connecté d'accéder à certaines fonctions racine sans exiger explicitement un accès root pour rendre l'expérience bureautique plus conviviale. commandes pour effectuer ces tâches. - Jeff Sereno