'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - À quel moment est-ce important d'utiliser ou est-ce important?

193

Lorsque je fais quelque chose qui nécessite de taper root des dizaines de fois de suite, je préfère passer ma session à une session root. Dans les divers tutoriels et instructions que j'ai utilisés sur Internet, je vois que sudo su , sudo su - , sudo -i et sudo /bin/bash sont utilisés pour ouvrir une session racine, mais je ne comprends pas la différence entre ces derniers et quand ou si cette différence compte.

Quelqu'un peut-il clarifier cela pour moi?

    
posée Paul 13.11.2013 - 00:30
la source

1 réponse

252

Pour expliquer cela, vous devez savoir ce que font les programmes:

su - La commande su est utilisée pour basculer vers un autre utilisateur ( s avec u ser), mais vous pouvez également passer à l’utilisateur root par invoquer la commande sans paramètre. su vous demande le mot de passe de l'utilisateur à changer après avoir tapé le mot de passe que vous avez changé pour l'environnement de l'utilisateur.

sudo - sudo est destiné à exécuter une seule commande avec les privilèges root. Mais contrairement à su , il vous demande le mot de passe de l'utilisateur actuel. Cet utilisateur doit être dans le fichier sudoers (ou un groupe qui se trouve dans le fichier sudoers). Par défaut, Ubuntu "se souvient" de votre mot de passe pendant 15 minutes, ce qui vous évite de taper votre mot de passe à chaque fois.

bash - Une interface texte pour interagir avec l'ordinateur. Il est important de comprendre la différence entre les shells de connexion, non connectés, interactifs et non interactifs:

  • shell de connexion: un shell de connexion vous connecte au système en tant qu'utilisateur spécifié, car il s'agit d'un nom d'utilisateur et d'un mot de passe. Lorsque vous tapez sur ctrl + alt + F1 pour vous connecter à un terminal virtuel après une connexion réussie, un shell de connexion.
  • shell non connecté: un shell exécuté sans connexion, nécessaire pour cela, est un utilisateur actuellement connecté. Lorsque vous ouvrez un terminal graphique dans gnome, il s’agit d’un shell non connecté.
  • shell interactif: un shell (login ou non) où vous pouvez taper ou interrompre de manière interactive des commandes. Par exemple un terminal gnome.
  • shell non interactif: Un (sous) shell qui est probablement exécuté à partir d'un processus automatisé. Vous ne verrez ni entrée ni sortie.

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

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

sudo su - Cette fois, il s’agit d’un shell de connexion, donc /etc/profile , .profile et .bashrc sont exécutés et vous vous trouverez dans le répertoire principal de root avec l’environnement root.

sudo -i C'est presque la même chose que sudo su - L'option -i (simuler la connexion initiale) exécute le shell spécifié par l'entrée de base de données de mot de passe de l'utilisateur cible comme 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 /bin/bash Cela signifie que vous appelez sudo avec la commande /bin/bash . /bin/bash est démarré en tant que shell non connecté, de sorte que tous les fichiers de points ne sont pas exécutés, mais bash lui-même lit .bashrc de l'utilisateur appelant. Votre environnement reste le même. Votre maison ne sera pas la maison de la racine. Donc, vous êtes root, mais dans l'environnement de l'utilisateur appelant.

sudo -s lit la variable $SHELL et exécute le contenu. Si $SHELL contient /bin/bash , il appelle sudo /bin/bash (voir ci-dessus).

Vérifier: Pour vérifier si vous êtes dans un shell de connexion ou non (ne fonctionne que dans bash car shopt est une commande intégrée):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
    
réponse donnée chaos 13.11.2013 - 10:43
la source

Lire d'autres questions sur les étiquettes