Question Quelles sont les différences entre «su», «sudo -s», «sudo -i», «sudo su»?


Je l'ai déjà lu du manuel mais je ne vois pas de différence.

su - modifier l'ID utilisateur ou devenir superutilisateur

sudo -s [command]

le -s L'option (shell) exécute le shell spécifié par la variable d'environnement SHELL si elle est définie ou le shell spécifié dans passwd (5). Si un                    La commande est spécifiée, elle est transmise au shell pour exécution. Sinon, un shell interactif est exécuté.

sudo -i  disparaître description dans le manuel


131
2017-10-22 06:11


origine


Aussi, ne pas utiliser su user pour vous connecter à partir de shells non fiables, mais su - user. Voir unix.stackexchange.com/q/7013/8250 - Lekensteyn
@Lekensteyn wow, excellent exemple. merci pour le LOL :) - törzsmókus
souvenez-vous toujours de l'ancien commandement: tu ne réclameras pas le nom de la racine en vain! - törzsmókus
Ne pas dire sudo -i est mauvais, mais vous pouvez certainement utiliser les choses - Kolob Canyon
Quasi-duplicata: askubuntu.com/questions/376199/… - Reinier Post


Réponses:


La principale différence entre ces commandes réside dans la manière dont elles limitent l'accès à leurs fonctions.

su  (qui signifie "utilisateur remplaçant" ou "utilisateur du commutateur") - fait exactement cela, il lance une autre instance de shell avec les privilèges de l'utilisateur cible. Pour vous assurer que vous avez le droit de le faire, il vous demande le mot de passe de l'utilisateur cible. Donc, pour devenir root, vous devez connaître le mot de passe root. Si plusieurs utilisateurs de votre ordinateur doivent exécuter des commandes en tant que root, ils doivent tous connaître le mot de passe root. Notez que ce sera le même mot de passe. Si vous devez révoquer les autorisations d'administrateur de l'un des utilisateurs, vous devez modifier le mot de passe root et ne le communiquer qu'aux personnes ayant besoin de garder l'accès - en désordre.

sudo  (hmm ... quel est le mnémonique? Super-User-DO?) est complètement différent Il utilise un fichier de configuration (/ etc / sudoers) qui répertorie les utilisateurs qui ont des droits sur des actions spécifiques (exécuter des commandes en tant que root, etc.). le mot de passe de l'utilisateur qui l'a lancé  - pour s’assurer que la personne au terminal est vraiment la même "joe" qui est listée dans /etc/sudoers. Pour révoquer les privilèges d'administrateur d'une personne, il vous suffit de modifier le fichier de configuration (ou de supprimer l'utilisateur d'un groupe répertorié dans cette configuration). Cela se traduit par une gestion beaucoup plus propre des privilèges.

En conséquence, dans de nombreux systèmes basés sur Debian root l'utilisateur n'a pas de mot de passe défini - c'est-à-dire qu'il n'est pas possible de se connecter en tant que root directement.

Aussi, /etc/sudoers permet de spécifier quelques options supplémentaires - c'est-à-dire que l'utilisateur X ne peut exécuter que le programme Y, etc.

Le souvent utilisé sudo su la combinaison fonctionne comme suit: d'abord sudo vous demande votre mot de passe, et, si vous êtes autorisé à le faire, appelle la commande suivante (su) en tant que super-utilisateur. Car su est invoqué par root, il ne vous oblige pas à entrer le mot de passe de l'utilisateur cible. Alors, sudo su vous permet d'ouvrir un shell en tant qu'autre utilisateur (y compris root), si vous êtes autorisé à accéder par super-utilisateur /etc/sudoers fichier.


107
2017-10-22 07:21



je n'ai jamais vu su en tant que "switch user", mais toujours en tant que superutilisateur; le comportement par défaut sans le nom d'utilisateur d'un autre utilisateur (bien que cela ait un sens). De Wikipédia : "La commande su, également appelée superutilisateur [1] dès 1974, a également été appelée" utilisateur de substitution "," utilisateur usurpé "ou" utilisateur défini "car elle permet de modifier le compte associé au terminal actuel ( fenêtre)." - dr jimbob
@dr jimbob: vous avez raison, mais je trouve que "changer d'utilisateur" décrit un peu mieux ce qu'il fait - bien que cela signifie historiquement "super utilisateur". Je suis également ravi de constater que l'article de Wikipedia est très similaire à ma réponse - je n'ai jamais vu l'article avant :) - Sergey
La signification officielle de "su" est "utilisateur de substitution". Voir: "man su". - Angel O'Sphere
@ AngelO'Sphere: Fait intéressant, la page de manuel d'Ubuntu ne mentionne pas du tout le terme "substitut". La page de manuel sur gnu.org (gnu.org/software/coreutils/manual/html_node/su-invocation.html) indique en effet "su: Exécute une commande avec un identifiant d'utilisateur et de groupe de substitution". Je pense que gnu.org est une source canonique :) - Sergey
@Serqey bien, Linux n'est pas unix: D peut-être que ce petit mot a été perdu. N'avoir aucune machine Solaris ou SunOS sous la main en ce moment, mais je vérifierai mon Mac plus tard. Pour autant que je sache (c'est-à-dire il y a environ 25 ans), il fallait toujours l'appeler "utilisateur de substitution". - Angel O'Sphere


sudo vous permet d'exécuter des commandes dans votre propre compte d'utilisateur avec les privilèges root. su vous permet de changer d'utilisateur pour être connecté en tant que root.

sudo -s exécute un shell avec les privilèges root. sudo -i acquiert également l'environnement de l'utilisateur root.

Pour voir la différence entre su et sudo -s, faire cd ~ et alors pwd après chacun d'eux. Dans le premier cas, vous serez dans le répertoire de base de root car vous êtes root. Dans le second cas, vous serez dans votre propre répertoire personnel, car vous avez vous-même des privilèges root.

Il y a plus de discussion sur cette question exacte ici.


48
2017-10-22 06:28



"Vous êtes vous-même avec les privilèges root" n'est pas ce qui se passe réellement :) En fait, il n'est pas possible d'être "vous-même avec les privilèges root" - vous êtes root ou vous-même. Essayez de taper qui suis je dans les deux cas. Le fait que cd ~ Les résultats sont différents si sudo -s ne définit pas la variable d'environnement $ HOME. - Sergey
@Sergey, whoami dit 'root' car vous exécutez la cmd 'whoami' comme si vous le faisiez, donc temporairement (pour la durée de cette commande), vous semblez être l’utilisateur root, mais vous n’avez peut-être pas encore tout accès root selon le fichier sudoers. - Octopus
@Octopus: ce que j'essayais de dire, c'est que sous Unix, un processus ne peut avoir qu'un seul UID et que cet UID détermine les permissions du processus. Vous ne pouvez pas être "vous-même avec les privilèges root", un programme s'exécute avec votre UID ou avec l'UID root (0). - Sergey
En ce qui concerne "vous ne pouvez toujours pas avoir un accès root complet selon le fichier sudoers": le sudoers les contrôles de fichiers qui peuvent exécuter quelle commande en tant qu'autre utilisateur, mais cela se produit avant l'exécution de la commande. Cependant, une fois que vous avez été autorisé à démarrer un processus comme, par exemple, root - le processus en cours a l'UID root et dispose d'un accès complet au système, sudo n'a aucun moyen de limiter cela. Encore une fois, vous êtes toujours vous-même ou root, il n'y a pas de "demi-moitié". Donc si sudoers fichier vous permet d'exécuter shell en tant que root - les autorisations dans ce shell seraient indiscernables d'un shell racine "normal". - Sergey


Cette réponse est une dupe de ma réponse sur une dupe de cette question, mettez ici la réponse canonique pour que les gens puissent la trouver!

La principale différence entre sudo -i et sudo -s est:

  • sudo -i vous donne l'environnement racine, c'est à dire votre ~/.bashrc est ignoré.
  • sudo -s vous donne l'environnement de l'utilisateur, donc votre ~/.bashrc est respecté.

Voici un exemple, vous pouvez voir que j'ai une application lsl dans mon ~/.bin/ répertoire accessible via sudo -s mais pas accessible avec sudo -i. Notez également que l’invite Bash change comme sudo -i mais pas avec sudo -s:

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

Bien que sudo -s est pratique pour vous donner l'environnement que vous connaissez, Je recommande l'utilisation de sudo -i pour deux raisons:

  1. Le rappel visuel que vous êtes dans une session "root".
  2. L'environnement racine est beaucoup moins susceptible d'être empoisonné par des logiciels malveillants, tels qu'une ligne malveillante dans .bashrc.

27
2017-11-08 14:07



J'ai remarqué que sudo -s ne semble pas traiter / etc / profile, ou quelque chose que j'ai dans /etc/profile.d/. - meffect


su Demande le mot de passe de l'utilisateur "root".

sudo demande votre propre mot de passe (et vérifie également si vous êtes autorisé à exécuter des commandes en tant que root, qui est configuré via /etc/sudoers - par défaut, tous les comptes utilisateurs appartenant au groupe "admin" sont autorisés à utiliser sudo).

sudo -s lance un shell en tant que root, mais ne modifie pas votre répertoire de travail. sudo -i simule une connexion au compte root: votre répertoire de travail sera /rootet root .profile etc. proviendront comme lors de la connexion.


6
2017-10-22 19:38



pour rendre la réponse plus complète: sudo -s est presque égal à su ($ HOME est différent) et sudo -i est égal à su - - DJCrashdummy


Dans Ubuntu ou un système connexe, je ne trouve pas beaucoup d'utilisation de su dans le sens traditionnel du super-utilisateur. sudo gère mieux cette affaire. cependant, su est idéal pour devenir un autre utilisateur dans des situations ponctuelles où la configuration de sudoers serait stupide.

Par exemple, si je répare mon système à partir d’un CD / USB en direct, je monte souvent mon disque dur et d’autres éléments nécessaires. chroot dans le système. Dans un tel cas, ma première commande est généralement:

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

De cette façon, je fonctionne non pas en tant que root, mais en tant qu'utilisateur normal, et j'utilise ensuite sudo selon le cas.


2
2017-10-26 07:23