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):
Et en comparant sudo -s
(à gauche) et sudo su
(à droite):
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.
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.
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.