web-dev-qa-db-fra.com

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

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

su - change l'ID utilisateur ou devient superutilisateur

Sudo -s [command]

L'option -s (Shell) exécute le shell spécifié par la variable d'environnement du shell, si celle-ci 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 -idisparaît la description dans le manuel

142
Smile.Hunter

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 alternatif") - fait exactement cela, il démarre une autre instance 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 que root, etc.). Lorsqu'il est appelé, 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" que celui 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 n’a pas de mot de passe défini, c’est-à-dire qu’il est impossible 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 y êtes autorisé, appelle le prochain commande (su) en tant que super-utilisateur. Étant donné que su est appelé par root, vous ne devez pas 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 au superutilisateur par le fichier /etc/sudoers.

116
Sergey

Sudo vous permet d'exécuter des commandes dans votre propre compte 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 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 .

58
Mike Scott

Cette réponse est une dupe de ma réponse sur ne 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 la suivante:

  • 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/ qui est accessible via Sudo -s mais non accessible avec Sudo -i. Notez également que l'invite de commandes change comme 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 fournir l'environnement avec lequel vous êtes familier, , 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 un logiciel malveillant, tel qu'une ligne non autorisée dans .bashrc.
35
dotancohen

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

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

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 le code racine .profile sera créé comme si vous vous connectiez.

9
Marius Gedminas

Dans Ubuntu ou un système apparenté, je ne trouve pas beaucoup d’utilisation pour su au sens traditionnel du terme superutilisateur. Sudo gère ce cas beaucoup mieux. Cependant, su est idéal pour devenir un autre utilisateur dans des situations uniques 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 les autres éléments nécessaires, ainsi que 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 ne travaille pas en tant que root, mais en tant qu'utilisateur normal, et j'utilise ensuite Sudo selon le cas.

2
Scott Severance