Pour lancer un shell root sur des machines sur lesquelles le compte root est désactivé, vous pouvez exécuter l’une des opérations suivantes:
sudo -i
: exécuter un shell de connexion interactif (reads/root/.bashrc
et/root/.profile
)sudo -s
: exécuter un shell interactif sans connexion (reads/root/.bashrc
)
Dans le monde Ubuntu, je vois très souvent sudo su
suggéré comme un moyen d’obtenir un shell root. Pourquoi exécuter deux commandes distinctes quand on va faire? Autant que je sache, sudo -i
est équivalent à sudo su -
et sudo -s
identique à sudo su
.
Les seules différences semblent être (en comparant sudo -i
à gauche et sudo su -
à droite):
Et en comparant sudo -s
(à gauche) et sudo su
(à droite):
Les principales différences (en ignorant les SUDO_foo
variables et LS_COLORS
) semblent être les XDG_foo
variables système dans les sudo su
versions.
Existe-t-il des cas où cette différence justifie l’utilisation de l’inélégant sudo su
? Puis-je dire en toute sécurité aux gens (comme je le fais souvent) qu'il n'y a jamais de raison de courir sudo su
ou est-ce que je manque quelque chose?
la source
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.su -
? Ne pensez-vous pas que cela pose un problème de sécurité dans les environnements multi-utilisateurs, où plusieurs personnes doivent avoir un accès root?su -
? Oui, il faudrait définir un mot de passe root, mais c'est trivial.Réponses:
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
appellesudo
avec la commandesu
. 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:sudo -s
lit la$SHELL
variable et exécute le contenu. Si$SHELL
contient,/bin/bash
il appellesudo /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 lusbash
.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 -
cellesudo su -
du modèlesudo -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 utilisersudo
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 estsu
. Pour un vétéran de la vieille école, une telle chosesudo
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 desudo
, si c'était possible. Je suis très réticent à utilisersudo
. Sur tous mes systèmes, le compte root est activé. Mais les choses changent, peut-être que le moment viendra, quandsu
sera obsolète etsudo
remplacesu
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 quesu
.la source
sudo su
alors? À l'époque, j'utilisais des distributions sans comptes sudo et root actifs, donc je ne sais pas. Cela pourrait expliquer la prédominance du sudo su meme dans le monde Ubuntu.sudo -i
ousudo -s
auparavant. Je suis sous UNIX depuis 1991 et pour moi,sudo su -
c'est une habitude enracinée à ce stade.sudo -s
la même chosesudo $SHELL
qu'alors?sudo su -
sont 1) que cela fonctionne et que vous savez exactement ce que cela fait, et 2) que vous n'avez pas à vous rappeler une autre optionsudo
(quand vous le savez déjàsu -
) et 3) que vous ne le faites pas. Je n'ai pas à me souvenir de la version desudo
votre travail actuelle. Pourquoi vous rappeler une question de plus quand ce que vous avez déjà fonctionne bien? Y a-t-il quelque chose quisu -i
fait mieux que d'éviter une entrée de journal? Je n'en utilise passudo su -
assez pour m'inquiéter de ça.sudo
et que je suis très habituésu
. C'est la combinaison des deux qui me dérange.Pour répondre directement à votre question: non, il n’ya aucune bonne raison de le faire. En outre, sudo su produit deux entrées de journal lorsqu'une suffirait.
J'ai vu beaucoup de gens faire cela, et quand je leur demande pourquoi ils ne se contentent pas de courir
sudo -s
, la réponse est simplement qu'ils ne connaissent pas le-s
drapeau au sudo, et en général, ils basculent après que je le signale.Cependant, à votre liste de
sudo -s
etsudo -i
, j'aimerais ajouter une option supplémentairesudo -sE
, qui remplace en quelque sortesu -m
.sudo -sE
préserve votre environnement, y compris le répertoire de base. Cela présente des risques si votre répertoire personnel n'est pas sécurisé (sur NFS). Mais dans un environnement où beaucoup de gens utilisent root, cela vous évite d'avoir à vous entendre sur le contenu du.bashrc
fichier racine . Mon.bashrc
contient de nombreuses spécialisations pour root. Par conséquent, je n'ai pas exactement le même environnement que root, mais au moins, je reçois exactement l'environnement souhaité.la source
$HOME
, cela signifie que tous les nouveaux fichiers créés dans le dossier de base appartiennent à root et non à vous. J'ai eu cette cause beaucoup difficile à diagnostiquer les erreurs d'autorisation.sudo -sE
puisecho $HOME
donne/root
sur CentOS 7, bash 4.2.-sE
ne semble pas conserver le répertoire de base comme vous l'avez indiqué.