Comme vous l'avez dit dans votre question, la principale différence est l'environnement.
sudo su -
contre. sudo -i
En cas de sudo su -
c'est un shell de connexion, donc /etc/profile
, .profile
et .bashrc
sont exécutés et vous vous trouverez dans le répertoire de root avec l'environnement racine.
sudo -i
est presque identique à sudo su -
L' -i
option (connexion initiale simulée) exécute le shell spécifié par l'entrée de la base de données de mots de passe de l'utilisateur cible en tant que shell de connexion. Cela signifie que les fichiers de ressources spécifiques à la connexion, tels que .profile
, .bashrc
ou .login
seront lus et exécutés par le shell.
sudo su
contre. sudo -s
sudo su
appelle sudo
avec la commande su
. Bash est appelé shell interactif sans connexion. Donc, bash
seulement exécute .bashrc
. Vous pouvez voir qu'après le passage à la racine, vous êtes toujours dans le même répertoire:
user@host:~$ sudo su
root@host:/home/user#
sudo -s
lit la $SHELL
variable et exécute le contenu. Si $SHELL
contient, /bin/bash
il appelle sudo /bin/bash
, ce qui signifie qu'il /bin/bash
est lancé en tant que shell sans connexion, de sorte que tous les fichiers de points ne sont pas exécutés, mais lus bash
. bashrc
de l'appelant. Votre environnement reste le même. Votre maison ne sera pas la maison de root. Donc, vous êtes root, mais dans l'environnement de l'utilisateur appelant.
Conclusion
Le -i
drapeau a été ajouté sudo
en 2004 afin de fournir une fonction similaire à sudo su -
celle sudo su -
du modèle sudo -i
. Je pense que ce que vous utilisez importe peu, sauf si l'environnement n'est pas important.
Une addition
Un point fondamental qui doit être mentionné ici est qu'il a sudo
été conçu pour exécuter une seule commande avec des privilèges plus élevés, puis abandonner ces privilèges à ceux d'origine. Cela n'a jamais été fait pour vraiment changer d' utilisateur et laisser ouverte un shell root. Au fil du temps, sudo
de tels mécanismes ont été étendus, car les gens étaient agacés par la raison pour laquelle ils devaient utiliser sudo
devant chaque commandement.
Donc, le sens de a sudo
été abusé. sudo
était destiné à encourager l'utilisateur à minimiser l'utilisation des privilèges root.
Ce que nous avons maintenant, sudo
devient de plus en plus populaire. Il est intégré dans presque toutes les distributions Linux bien connues. L'outil d'origine pour passer à un autre compte d'utilisateur est su
. Pour un vétéran de la vieille école, une telle chose sudo
pourrait sembler inutile. Il ajoute de la complexité et se comporte plus probablement aux mécanismes connus de Microsofts os-family et va donc à l’encontre de la philosophie de la simplicité des systèmes * nix.
Je ne suis pas vraiment un ancien combattant, mais à mon avis, cela sudo
a toujours été une épine dans mon côté, à partir du moment où il a été présenté et j'ai toujours travaillé sur l'utilisation de sudo
, si c'était possible. Je suis très réticent à utiliser sudo
. Sur tous mes systèmes, le compte root est activé. Mais les choses changent, peut-être que le moment viendra, quand su
sera obsolète et sudo
remplace su
complètement.
Par conséquent, je pense qu'il sera préférable d'utiliser sudo
les mécanismes internes ( -s
, -i
) au lieu de s'appuyer sur un ancien outil tel que su
.
ubuntu
qui empêchent les utilisateurs de standardsu -
. Ils ont créé un problème et il y a maintenant des discussions sans fin sur la façon de le résoudre.