GNU/Linux >> Tutoriels Linux >  >> Linux

Y a-t-il jamais une bonne raison de courir Sudo Su ?

Pour lancer un root shell sur des machines où le compte root est désactivé, vous pouvez exécuter l'une des options :

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

Dans le monde Ubuntu, je vois très souvent sudo su suggéré comme moyen d'obtenir un shell racine. Pourquoi exécuter deux commandes distinctes alors qu'une seule suffit ? Autant que je sache, sudo -i est équivalent à sudo su - et sudo -s est 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 le SUDO_foo variables et LS_COLORS ) semble être le XDG_foo variables système dans le sudo su versions.

Y a-t-il des cas où cette différence justifie l'utilisation du plutôt inélégant sudo su ? Puis-je dire en toute sécurité aux gens (comme je l'ai souvent fait) qu'il ne sert à rien d'exécuter sudo su ou ai-je raté quelque chose ?

Réponse acceptée :

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

sudo su - vs 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 retrouverez dans le répertoire personnel de root avec l'environnement de root.

sudo -i est presque identique à sudo su - Le -i (simuler la connexion initiale) 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 sera lu et exécuté par le shell.

sudo su vs sudo -s

sudo su appelle sudo avec la commande su . Bash est appelé shell interactif sans connexion. Donc bash exécute uniquement .bashrc . Vous pouvez voir qu'après être passé en root, vous êtes toujours dans le même répertoire :

[email protected]:~$ sudo su
[email protected]:/home/user#

sudo -s lit le $SHELL variable et exécute le contenu. Si $SHELL contient /bin/bash il invoque sudo /bin/bash , ce qui signifie que /bin/bash est démarré en tant que shell sans connexion, donc tous les fichiers de points ne sont pas exécutés, mais bash lit lui-même .bashrc de l'utilisateur appelant. Votre environnement reste le même. Votre maison ne sera pas la maison de root. Vous êtes donc root, mais dans l'environnement de l'utilisateur appelant.

Conclusion

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

Connexe :Linux – netfilter/iptables :pourquoi ne pas utiliser la table brute ?

Ajout

Un point fondamental qui doit être mentionné ici est que sudo a été conçu pour exécuter seulement une seule commande avec des privilèges plus élevés, puis abandonnez ces privilèges à ceux d'origine. Il n'a jamais été conçu pour vraiment changer l'utilisateur et laissez ouvert un shell root. Au fil du temps, sudo a été étendu avec de tels mécanismes, car les gens étaient ennuyés de savoir pourquoi utiliser sudo devant chaque commande.

Donc la signification de sudo a été abusé. sudo visait à encourager l'utilisateur à minimiser l'utilisation des privilèges root.

Ce que nous avons maintenant, c'est 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 utilisateur est su . Pour un vétéran de la vieille école * nix, une 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 de Microsoft, et est donc contraire à la philosophie de simplicité des systèmes *nix.

Je ne suis pas vraiment un vétéran, mais aussi à mon avis sudo a toujours été une épine dans mon pied, à partir du moment où il a été introduit et j'ai toujours travaillé autour de 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 où su sera obsolète et sudo remplace su complètement.

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


Linux
  1. Ubuntu - Exécuter la commande au démarrage avec sudo

  2. Exécutez le fichier texte en tant que commandes dans Bash

  3. Comment vérifier si j'ai un accès sudo ?

  4. Exécutez la commande cd en tant que superutilisateur sous Linux

  5. comment passer la variable d'environnement à sudo su

Comment exécuter la commande Sudo sans mot de passe

Comment exécuter des commandes Sudo sans mot de passe

Comment exécuter le terminal en tant que root ?

Comment exécuter un alias avec Sudo sous Linux

Comment exécuter les commandes sudo sans mot de passe

Debian 11.3 est si bonne qu'il n'y a tout simplement aucune raison de ne pas l'utiliser