web-dev-qa-db-fra.com

Pourquoi le redémarrage et la mise hors tension nécessitent-ils des privilèges root?

Pour redémarrer ou arrêter Linux à partir du terminal, on peut utiliser reboot et poweroff, respectivement. Cependant, ces deux commandes nécessitent des privilèges root. Pourquoi cela est-il ainsi? Quel risque de sécurité est posé par le fait de ne pas avoir besoin de privilèges root? L'interface graphique permet à tout utilisateur d'arrêter ou de redémarrer, alors pourquoi les commandes du terminal doivent-elles être exécutées en tant que root?

En parlant des options de l'interface graphique, si le terminal nécessite des privilèges root pour éteindre ou redémarrer l'ordinateur Linux, comment l'interface graphique est-elle en mesure de présenter une option qui fait de même sans nécessiter la saisie d'un mot de passe?

63
Rohan

Attention: à la fin de cette réponse, vous en saurez probablement plus sur Linux que vous ne le vouliez

Pourquoi reboot et poweroff nécessitent des privilèges root

Les systèmes d'exploitation GNU/Linux sont multi-utilisateurs , tout comme ses UNIX prédécesseurs . Le système est une ressource partagée, et plusieurs utilisateurs peuvent l'utiliser simultanément.

Dans le passé, cela se produisait généralement sur terminaux informatiques connectés à un mini-ordinateur ou à un ordinateur central .

PDP-11

Le mini-ordinateur populaire PDP-11. Un peu grand, selon les standards d'aujourd'hui:)

De nos jours, cela peut se produire à distance sur le réseau (généralement via SSH ), sur clients légers ou sur un - configuration multisiège , où il y a plusieurs utilisateurs locaux avec du matériel connecté au même ordinateur.

multi-seat

Une configuration multi-sièges. Photo de Tiago Vignatti

En pratique, des centaines ou des milliers d'utilisateurs peuvent utiliser simultanément le même ordinateur. Cela n'aurait aucun sens si un utilisateur pouvait éteindre l'ordinateur et empêcher tout le monde de l'utiliser.

Quel risque de sécurité est posé par le fait de ne pas exiger que cela ait des privilèges root?

Sur un système multi-utilisateur, cela empêche ce qui est effectivement une attaque par déni de service

L'interface graphique permet à tout utilisateur d'arrêter ou de redémarrer, alors pourquoi les commandes du terminal doivent-elles être exécutées en tant que root?

De nombreuses distributions Linux ne fournissent pas d'interface graphique. Les distributions Linux de bureau qui le font sont généralement orientées vers un modèle utilisateur unique, il est donc logique de permettre cela à partir de l'interface graphique.

Raisons possibles pour lesquelles les commandes nécessitent toujours des privilèges root:

  • La plupart des utilisateurs d'une distribution orientée bureau utiliseront l'interface graphique, pas la ligne de commande, donc cela ne vaut pas la peine
  • Cohérence avec les conventions UNIX acceptées
  • Sécurité (sans doute erronée), car elle empêche les programmes ou scripts naïfs d'éteindre le système

Comment l'interface graphique peut-elle présenter l'arrêt sans privilèges root?

Le mécanisme réel variera en fonction du gestionnaire de bureau spécifique (GUI). De manière générale, plusieurs mécanismes sont disponibles pour ce type de tâche:

  • Exécuter l'interface graphique elle-même en tant que root (j'espère que cela ne devrait pas se produire sur une implémentation appropriée ...)
  • setuid
  • Sudo avec NOPASSWD
  • Communiquer la commande à un autre processus disposant de ces privilèges, généralement avec D-Bus . Sur les interfaces graphiques populaires, cela est généralement géré par polkit .

En résumé

Linux est utilisé dans des contextes extrêmement variés - des ordinateurs centraux, des serveurs et des ordinateurs de bureau aux superordinateurs, téléphones mobiles et fours à micro-ondes . Il est difficile de satisfaire tout le monde tout le temps! :)

61
goncalopp

Linux a ses origines dans Unix et Unix a été initialement développé comme un système d'exploitation multi-utilisateurs. Un utilisateur peut perturber d'autres utilisateurs en souhaitant redémarrer le système. Seul l'administrateur avec des privilèges root pouvait le faire.

45
Fred

Son tout à fait naturel et une question de politique et de commodité, il avait été autorisé à partir de l'interface graphique car vous êtes physiquement connecté à la machine. (Certaines distributions Linux vous demanderont toujours un mot de passe si l'interface graphique ne fonctionne pas en tant que root, j'utilise Centos 6 et il n'y a même pas d'option d'arrêt/redémarrage de l'interface utilisateur graphique pour mon utilisateur, il n'y a qu'une option de déconnexion et de verrouillage)

À partir d'un pseudo-terminal, vous devez être root ou avoir le privilège Sudo car vous ne voudrez peut-être pas qu'un utilisateur ssh sur votre serveur ou votre machine et l'arrête ou le redémarre.

35
Ijaz Ahmad Khan

L'arrêt (de toute nature) affecte tous les utilisateurs, jusqu'à et y compris la suppression de leurs processus. Ce n'est pas quelque chose que vous souhaiteriez normalement que J. Random User puisse faire, simplement parce qu'il est connecté.

Normalement, seuls les opérateurs autorisés devraient être autorisés à redémarrer, et dans certains cas, ceux qui ont un accès physique - de nombreux systèmes Linux peuvent être arrêtés à partir d'un bouton d'alimentation sur le boîtier. Je le sais, car je l'ai accidentellement fait! De nos jours, je laisse normalement le bouton déconnecté lors de l'assemblage d'un système ...

10
Toby Speight

Pour le 1st question:

Quel risque de sécurité est posé par le fait de ne pas exiger que cela ait des privilèges root? L'interface graphique permet à tout utilisateur d'arrêter ou de redémarrer, alors pourquoi les commandes du terminal doivent-elles être exécutées en tant que root?

Oui, comme indiqué dans la réponse this , Linux est intrinsèquement conçu comme un système multi-utilisateur. Considérez que plus d'un utilisateur travaille sur un système, alors ce serait mauvais si un utilisateur normal est autorisé à éteindre le système pendant que d'autres travaillent. Imaginez ce qui se passe si votre serveur web est arrêté par un utilisateur à distance! Ainsi, seul l'administrateur système aka root-user est autorisé à poweroff ou reboot le système.

Vous pouvez également comprendre:

$ which poweroff reboot
/sbin/poweroff
/sbin/reboot

Ainsi, poweroff et reboot sont situés sous /sbin répertoire qui contient les utilitaires et les commandes root uniquement, les fichiers binaires essentiels pour démarrer, restaurer, récupérer et/ou réparer le système.

Ainsi, ces commandes devraient être exécutées par l'administrateur système/utilisateur root, visitez la page de manuel:

DESCRIPTION
       These programs allow a system administrator to reboot, halt or poweroff the system.

Visitez également la question connexe: Pourquoi devons-nous être root dans le terminal pour l'arrêt et le redémarrage?


Pour le 2dakota du Nord question:

En parlant des options de l'interface graphique, si le terminal nécessite des privilèges root pour éteindre ou redémarrer l'ordinateur Linux, comment l'interface graphique est-elle en mesure de présenter une option qui fait de même sans nécessiter la saisie d'un mot de passe?

L'interface graphique est une question de commodité et, de toute évidence, l'utilisateur connecté à l'interface graphique sait ce qui se passe et ce qu'il fait. Ainsi, il ne s'attend pas à une invite/exigence de mot de passe de l'utilisateur, c'est-à-dire qu'il soit autorisé à arrêter ou à redémarrer via un kit de politique mécanisme comme . Mais en cas de ligne de commande les choses sont différentes ...

Bien sûr, vous pouvez utiliser une commande équivalente fournie par Desktop-Environment. Par exemple, pour gnome, vous pouvez utiliser: gnome-session-quit avec l'option appropriée qui ne nécessite pas de privilèges root.

Visitez également la question connexe: Comment le bouton d'alimentation arrête-t-il l'ordinateur sans autorisation root?

5
Pandya

comme les autres l'ont déjà écrit, un utilisateur "normal" ne doit pas pouvoir mettre fin aux processus des autres utilisateurs ou arrêter un service (serveur web, serveur de messagerie, ...) et c'est pourquoi des droits de super-utilisateur sont nécessaires.

L'interface graphique est capable de s'arrêter ou de redémarrer via le mécanisme setuid https://en.wikipedia.org/wiki/Setuid . En termes simples: la commande reboot elle-même a des privilèges root et vous, en tant qu'utilisateur normal, êtes autorisé à exécuter le redémarrage. Étant donné que vous n'êtes pas autorisé à manipuler l'exécutable de redémarrage (vous avez des droits d'exécution mais aucune autorisation d'écriture), cela ne fournit pas un moyen d'obtenir des droits root sur la machine.

Et (encore une fois, comme les autres l'ont déjà écrit), l'interface graphique est supposée être exécutée physiquement sur la machine, il s'agit donc d'un ordinateur utilisateur et non d'un serveur, et vous pouvez (en débranchant l'alimentation) éteindre l'ordinateur de toute façon, alors pourquoi s'embêter sur les droits root;) J'ai également vu des interfaces graphiques, qui vérifient si d'autres utilisateurs sont connectés (par exemple un shell root quelque part) et ne permettent pas de fermer si d'autres utilisateurs sont connectés.

EDIT: corrigé par Pandya, c'est un kit de politique vous permettant en tant qu'utilisateur normal de redémarrer/arrêter

3
pseyfert