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

128

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

su - changez l'ID utilisateur ou devenez superutilisateur

sudo -s [command]

L'option -s (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

    
posée Smile.Hunter 22.10.2011 - 08:11
la source

5 réponses

106

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

su (qui signifie "utilisateur remplaç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 mot de passe sera identique. Si vous devez révoquer les autorisations d'administrateur de l'un des utilisateurs, vous devez changer le mot de passe root et ne le communiquer qu'aux personnes qui ont besoin de garder l'accès - désordonné.

sudo (hmm ... qu'est-ce que le mnémonique? Super-User-DO?) est complètement différent. Il utilise un fichier de configuration (/ etc / sudoers) qui répertorie les utilisateurs ayant des droits sur des actions spécifiques (commandes exécutables en tant que root, etc.). Invoqué, il demande le mot de passe de l'utilisateur qui l'a lancé - pour s'assurer que la personne au 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, root user n'a pas de mot de passe défini - c'est-à-dire qu'il n'est pas possible de se connecter directement en tant que root.

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

La combinaison sudo su souvent utilisée fonctionne comme suit: first sudo vous demande votre mot de passe et, si vous êtes autorisé à le faire, appelle la commande suivante ( su ) en tant que superutilisateur. Comme su est appelé par root , vous n'avez pas besoin d'entrer le mot de passe de l'utilisateur cible. Ainsi, sudo su vous permet d'ouvrir un shell en tant qu'autre utilisateur (y compris root), si vous êtes autorisé à accéder en super-utilisateur par le fichier /etc/sudoers .

    
réponse donnée Sergey 22.10.2011 - 09:21
la source
47

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 que vous soyez réellement 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 , faites cd ~ puis pwd après chacun d'eux. Dans le premier cas, vous serez dans le répertoire principal de root, car vous êtes root. Dans le second cas, vous serez dans votre propre répertoire personnel, car vous disposez des privilèges root.

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

    
réponse donnée Mike Scott 22.10.2011 - 08:28
la source
25

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 que 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 répertoire ~/.bin/ accessible via sudo -s mais non accessible avec sudo -i . Notez également que l'invite Bash change avec 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 soit 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, comme une ligne malveillante dans .bashrc .
réponse donnée dotancohen 08.11.2014 - 15:07
la source
6

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, ce qui est configuré via /etc/sudoers - par défaut, tous les comptes utilisateur 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 /root , et .profile etc. racine sera comme si vous vous connectiez.

    
réponse donnée Marius Gedminas 22.10.2011 - 21:38
la source
2

Dans Ubuntu ou un système associé, 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 uniques où la configuration de sudoers serait idiote.

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 et 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 pas en tant que root, mais en tant qu'utilisateur normal, et j'utilise ensuite sudo comme il convient.

    
réponse donnée Scott Severance 26.10.2011 - 09:23
la source

Lire d'autres questions sur les étiquettes