Quelles sont les différences entre “su”, “sudo -s”, “sudo -i”, “sudo su”?

148

Je l'ai déjà lu dans le manuel mais je ne vois pas la différence ..

su - changer l'ID utilisateur ou devenir superutilisateur

sudo -s [command]

L' -soption (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 une commande est spécifiée, elle est transmise au shell pour exécution. Sinon, un shell interactif est exécuté.

sudo -i disparaît description dans le manuel

Smile.Hunter
la source
7
En outre, n'utilisez pas su userpour vous connecter à partir de shells non fiables, mais su - user. Voir unix.stackexchange.com/q/7013/8250
Lekensteyn
@Lekensteyn wow, bon exemple. merci pour le LOL :)
törzsmókus
1
Rappelez-vous toujours le vieux commandement: tu ne réclameras pas le nom de la racine en vain!
törzsmókus
Ne dites pas que sudo -ic'est mauvais, mais vous pouvez certainement vous en servir
Kolob Canyon
Quasi-dupliqué: askubuntu.com/questions/376199/…
Reinier Post le

Réponses:

118

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

su (ce qui signifie "utilisateur suppléant" ou "utilisateur de commutateur") - fait exactement cela, il démarre 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 le transmettre uniquement aux personnes qui doivent conserver 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 autorisés à exécuter des actions spécifiques (commandes d'exécution en tant qu'utilisateur root, etc.). Lorsqu'il est appelé, il demande le mot de passe de l'utilisateur qui l'a lancé - pour garantir terminal est vraiment le même "joe" qui est répertorié 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, rootaucun mot de passe n’est défini, c’est-à-dire qu’il est impossible de se connecter directement en tant que root.

De plus, /etc/sudoerspermet de spécifier des options supplémentaires - par exemple l' utilisateur X est seulement capable d'exécuter le programme Y , etc.

La sudo sucombinaison souvent utilisée fonctionne comme suit: sudovous demande d' abord votre mot de passe et, si vous y êtes autorisé, appelle la commande suivante ( su) en tant que super-utilisateur. Comme il suest appelé par root, il ne vous est pas demandé de saisir le mot de passe de l'utilisateur cible. Donc, sudo suvous permet d'ouvrir un shell en tant qu'autre utilisateur (y compris root), si vous êtes autorisé à accéder au superutilisateur par le /etc/sudoersfichier.

Sergey
la source
2
Je n'ai jamais vu en sutant que "changement d'utilisateur", mais toujours en tant que superutilisateur; le comportement par défaut sans le nom d'utilisateur d'un autre utilisateur (bien que cela ait du sens). Un article de wikipedia : "La commande su, également appelée super utilisateur [1] dès 1974, a également été appelée" utilisateur substitut "," utilisateur usurpateur "ou" utilisateur défini ", car elle permet de modifier le compte associé au compte courant. terminal (fenêtre). "
dr jimbob
5
@dr jimbob: vous avez raison, mais je trouve que "changer d'utilisateur" est un peu mieux décrit ce qu'il fait - bien qu'historiquement, cela signifie "super utilisateur". Je suis également ravi de constater que l'article de Wikipédia est très similaire à ma réponse - je n'avais jamais vu l'article auparavant :)
Sergey
11
La signification officielle de "su" est "utilisateur substitut". Voir: "homme su".
Angel O'Sphere
1
@ AngelO'Sphere: Il est intéressant de noter que la page de manuel d'Ubuntu ne mentionne absolument pas le mot "remplacer". La page de manuel sur gnu.org ( gnu.org/software/coreutils/manual/html_node/su-invocation.html ) dit en effet "su: Exécute une commande avec un utilisateur et un ID de groupe de remplacement". Je pense que gnu.org est une source canonique :)
Sergey
1
Qu'en est- il sudo su?
Kaz Wolfe
59

sudovous permet d'exécuter des commandes dans votre propre compte utilisateur avec les privilèges root. suvous permet de changer d'utilisateur pour que vous soyez réellement connecté en tant que root.

sudo -sexécute un shell avec les privilèges root. sudo -iacquiert également l'environnement de l'utilisateur root.

Pour voir la différence entre suet sudo -s, faites cd ~et ensuite pwdaprès chacun d’eux. Dans le premier cas, vous serez dans le répertoire de base de la racine, car vous êtes la racine. Dans le second cas, vous serez dans votre propre répertoire personnel, car vous êtes vous-même avec les privilèges root.

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

Mike Scott
la source
20
"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 des privilèges root" - vous êtes soit root, soit vous-même. Essayez de taper whoami dans les deux cas. Le fait que les cd ~résultats soient différents est dû au fait que sudo n'a pas défini la variable d'environnement $ HOME.
Sergey
1
@Sergey, qui est indiqué par 'root' comme étant 'root' car vous exécutez la commande 'whoami' comme si vous l'aviez soudainement prise en compte, de manière temporaire accès root selon le fichier sudoers.
Octopus
1
@Octopus: ce que j'essayais de dire, c'est que sous Unix, un processus ne peut avoir qu'un seul UID et que ce dernier détermine les autorisations du processus. Vous ne pouvez pas être "vous-même avec les privilèges root", un programme est exécuté avec votre UID ou avec l'UID (0) de la racine.
Sergey
5
En ce qui concerne "vous ne disposez peut-être toujours pas d'un accès root complet selon le fichier sudoers": le sudoersfichier contrôle qui peut exécuter telle commande en tant qu'autre utilisateur, mais cela se produit avant que la commande ne soit exécutée. Cependant, une fois que vous avez été autorisé à démarrer un processus en tant que root, par exemple, le processus en cours possède un UID et un accès complet au système. Il n’est donc pas possible pour sudo de le restreindre. Encore une fois, vous êtes toujours soit vous-même, soit root, il n'y a pas de "demi-n-moitié". Ainsi, si le sudoersfichier vous permet d’exécuter un shell en tant qu’utilisateur root, les autorisations dans ce shell seraient impossibles à distinguer d’un shell racine "normal".
Sergey
36

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 -iet sudo -sest:

  • sudo -ivous donne l'environnement racine, c'est-à-dire que votre ~/.bashrcest ignoré.
  • sudo -svous donne l'environnement de l'utilisateur, donc votre ~/.bashrcest respecté.

Voici un exemple, vous pouvez voir que j'ai une application lsldans mon ~/.bin/répertoire qui est accessible via sudo -smais pas accessible avec sudo -i. Notez également que l’invite Bash change comme il le fera avec sudo -imais 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 cela sudo -ssoit pratique pour vous fournir l’environnement que vous connaissez bien, je recommande l’utilisation desudo -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 intoxiqué par des logiciels malveillants, tels que des lignes non fiables .bashrc.
dotancohen
la source
J'ai remarqué que sudo -s ne semble pas traiter / etc / profile, ou tout ce que j'ai dans /etc/profile.d/ .. une idée pourquoi?
meffect
@ docancohen - Qu'entendez-vous par sudo -sfournit un environnement familier à l'utilisateur?
Motivé le
@dotancohen - La commande sudo -s fournit déjà des repères visuels, je suis donc curieux de savoir pourquoi sudo -i est une meilleure option.
Motivé le
9

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

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

sudo -slance un shell en tant que root, mais ne change pas votre répertoire de travail. sudo -isimule une connexion au compte root: votre répertoire de travail sera /root, et les racines, .profileetc. seront obtenues comme si vous vous connectiez.

Marius Gedminas
la source
1
pour rendre la réponse plus complète: sudo -sest presque égal à su($ HOME est différent) et sudo -iest égal àsu -
DJCrashdummy
@DJCrashdummy - Pourquoi dites-vous presque égal à? Qu'est-ce qui est différent?
Motivé le
2

Dans Ubuntu ou un système connexe, je ne trouve pas beaucoup d’utilisation sudans le sens traditionnel du super-utilisateur. sudogère ce cas beaucoup mieux. Cependant, il suest intéressant de 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 live CD / USB, je vais souvent monter mon disque dur et d'autres éléments nécessaires chrootdans 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 ne travaille pas en tant que root, mais en tant qu'utilisateur normal, et je l'utilise ensuite sudocomme il convient.

Scott Severance
la source
0
  • su Demande le mot de passe root, devient root, ouvre un shell interactif sans connexion.
  • su - Demande le mot de passe root, devient root, ouvre un shell de connexion interactif.

  • sudo -s Demande vos mots de passe, devient root, ouvre un shell interactif sans login.
  • sudo -i Demande vos mots de passe, devient root, ouvre un shell de connexion interactif.

La meilleure pratique consiste à utiliser ces deux.


  • sudo suDemande votre mot de passe, devient root pendant une seconde et s'exécute en sutant que root`.
  • sudo su -Demande votre mot de passe, devient root pendant une seconde et s'exécute en su -tant que root.

Donc, dans ce cas, vous suutilisez sudoet vous n'avez pas besoin de connaître le mot de passe de root. Les résultats sont les mêmes que suet su -.

Ravexina
la source
Quelle est la différence entre un shell login et non login?
Pilot6