Y at-il jamais une bonne raison de courir sudo su?

Pour lancer un shell racine sur les ordinateurs sur lesquels le count root est désactivé, vous pouvez exécuter l'un des éléments suivants:

  • sudo -i : lance un shell de connection interactif (lit /root/.bashrc et /root/.profile )
  • sudo -s : lance un shell interactif sans connection (lit /root/.bashrc )

Dans le monde Ubuntu, je vois très souvent sudo su comme un moyen d'get un shell racine. Pourquoi exécuter deux commands séparées quand on le fera? Pour autant que je sudo -i , sudo -i est équivalent à sudo su - et sudo -s est le même que sudo su .

Les seules différences semblent être (comparer sudo -i à gauche et sudo su - à droite):

capture d'écran de meld comparant 'sudo -i' et 'sudo su -'

Et en comparant sudo -s (à gauche) et sudo su (à droite):

capture d'écran de meld comparant 'sudo -s' et 'sudo su'

Les principales différences (ignorant les variables SUDO_foo et LS_COLORS ) semblent être les variables système XDG_foo dans les versions sudo su .

Y a-t-il des cas où cette différence justifie l'utilisation du sudo su plutôt inélégant? Puis-je dire en toute security aux gens (comme je l'ai souvent) qu'il n'y a aucun intérêt à faire fonctionner sudo su ou est-ce que je manque quelque chose?

Comme vous l'avez indiqué dans votre question, la principale différence est l'environnement.

sudo su - vs sudo -i

Dans le cas de sudo su - il s'agit d'un shell de connection, donc /etc/profile , .profile et .bashrc sont exécutés et vous vous refindez dans le directory racine de la racine avec l'environnement de root.

sudo -i est presque le même que sudo su - L'option -i (simulate login initial) exécute le shell spécifié par l'input de database du mot de passe de l'user cible en tant que shell de connection. Cela signifie que les files de ressources spécifiques au login tels que .profile , .bashrc ou .login seront lus et exécutés par le shell.

sudo su vs sudo -s

sudo su appelle sudo avec la command su . Bash est appelé en tant que shell interactif non-connection. Donc bash n'exécute que .bashrc . Vous pouvez voir qu'après avoir passé à la racine vous êtes toujours dans le même directory:

 user@host:~$ sudo su root@host:/home/user# 

sudo -s lit la variable $SHELL et exécute le contenu. Si $SHELL contient /bin/bash il appelle sudo /bin/bash , ce qui signifie que /bin/bash est démarré comme shell non-login, donc tous les files point ne sont pas exécutés. bashrc de l'user appelant. Votre environnement rest le même. Votre maison ne sera pas la maison de la racine. Donc, vous êtes root, mais dans l'environnement de l'user appelant.

Conclusion

Le drapeau -i a été ajouté à sudo en 2004 , pour fournir une fonction similaire à sudo su - , donc sudo su - était le model pour sudo -i et censé fonctionner comme ça. Je pense que peu importe ce que vous utilisez, à less que l'environnement ne soit pas important.

Une addition

Un point fondamental qui doit être mentionné ici est que sudo été conçu pour n'exécuter qu'une seule command avec des privilèges plus élevés, puis abandonner ces privilèges aux originaux. Il n'a jamais été destiné à vraiment changer l'user et laisser ouvert un shell racine. Au fil du time, sudo été élargi avec de tels mécanismes, parce que les gens étaient ennuyés de savoir pourquoi utiliser sudo devant chaque command.

Donc, le sens de sudo été abusé. sudo était destiné à encourager l'user à minimiser l'utilisation des privilèges root.

Ce que nous avons maintenant, sudo devient de plus en plus populaire. Il est embedded dans presque toutes les dissortingbutions Linux bien connues. L'outil d'origine pour passer à un autre count d'user est su . Pour une vieille école * vétéran nix une telle chose comme sudo peut sembler inutile. Il ajoute de la complexité et se comporte plus probablement aux mécanismes que nous connaissons de la famille os Microsofts, et est donc contraire à la philosophie de la simplicité des systèmes * nix.

Je ne suis pas vraiment un vétéran, mais à mon avis, sudo a toujours été une épine dans mon côté, depuis le time a été introduit et j'ai toujours travaillé autour de l'utilisation de sudo , si c'était possible. Je suis le plus réticent à utiliser sudo . Sur tous mes systèmes, le count root est activé. Mais les choses changent, peut-être le time viendra, quand su sera déprécié et sudo remplace complètement su .

Par conséquent, je pense qu'il sera préférable d'utiliser les mécanismes internes de sudo ( -s , -i ) au lieu de s'appuyer sur un ancien outil tel que su .

Pour répondre directement à votre question: non, il n'y a pas de bonne raison de le faire. Aussi, sudo su produit deux inputs de journal quand il suffirait.

J'ai vu beaucoup de gens faire ça, et quand je request pourquoi ils ne font pas juste sudo -s , la réponse est juste qu'ils ne connaissent pas le drapeau -s à sudo, et généralement ils changent après que je le pointe en dehors.

Cependant, à votre list de sudo -s et sudo -i , j'aimerais append une autre option, sudo -sE , qui est une sorte de rlocation pour su -m . sudo -sE préserve votre environnement, y compris le directory personnel. Cela comporte des risques si votre directory personnel est non sécurisé (sur NFS). Mais dans un environnement où beaucoup de gens utilisent la racine, cela vous évite d'avoir à se mettre d'accord sur le contenu du file racine .bashrc . Mon .bashrc contient de nombreuses spécialisations pour root, donc je ne reçois pas exactement le même environnement que root, mais au less j'obtiens exactement l'environnement que je veux.