Quelle est la différence entre «sudo -i» et «sudo bash -l»

13

Il y a une question récente concernant plusieurs administrateurs système fonctionnant en tant que root, et a sudo bash -lété référencée.

J'ai cherché cela sur google et SE, mais je ne comprends pas la différence entre sudo bash -let sudo -i.

D'après les pages de manuel de bash et sudo, il semble que la différence peut être que sudo bash -ls'exécute ~ / .bash_profile, ~ / .bash_login, ~ / .profile et ~ / .bash_logout de l'utilisateur root, mais d'après mes propres tests, cela ressemble à il exécute le .bashrc de l'utilisateur normal et non le root. J'ai peut-être mal compris à quel utilisateur l'expression ~ fait référence dans les pages de manuel. Une clarification de la différence et des scénarios d'utilisation serait appréciée.

Rqomey
la source

Réponses:

10

Ils diffèrent en ce que si le shell de connexion de l'utilisateur root spécifié dans / etc / passwd n'est pas bash, alors la deuxième commande vous obtiendra un shell bash en tant que root tandis que la première commande utilisera le shell interactif de l'utilisateur root.

johnshen64
la source
Salut @ johnshen64, seriez-vous en mesure de clarifier les différents scénarios d'utilisation?
Rqomey
2
les gens aiment le shell qu'ils utilisent, donc si vous voulez être sûr d'utiliser bash, alors le deuxième formulaire devrait être utilisé. le second formulaire simule également une connexion réelle (c'est-à-dire ce que -l signifie). bien sûr, vous pouvez également taper bash lorsque vous constatez que l'utilisateur (par défaut root) n'a pas bash comme shell interactif lors de l'utilisation de sudo -i. sinon la différence est très mineure. comme le montre l'autre réponse, il existe également quelques différences d'environnement mineures. dans la plupart des cas, la différence n'a pas d'importance et la première est plus courte, car la plupart des distributions utilisent bash. j'utilise rarement la 2ème forme.
johnshen64
4

Aussi pour ajouter à la réponse @ johnshen64, j'ai remarqué que l' sudo -iinvocation met à jour la $USERNAMEvariable env vers rootet cd ~vers la maison de l'utilisateur comme ça;

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

Cependant, for sudo bash -l $USERNAMEn'est pas modifié et le répertoire de travail n'est pas modifié. (bien que cela ne soit pas cohérent entre les autres utilisateurs, voir les commentaires ...)

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

Donc, sans doute, vous n'obtenez pas exactement le même ensemble de ~/.bashrc, ou pas dans le même ordre, etc.

(ma boîte a peut-être été un peu .bashrcgâchée par mes bricolages, donc YMMV)

Tom H
la source
Merci @ Tom H: echo $USERNAMEretourne root les deux fois pour moi (sur mon bureau ubuntu et centos 5.2). PWD est cependant comme vous le signalez.
Rqomey