web-dev-qa-db-fra.com

Quelle est la différence fonctionnelle entre Sudo su et Sudo -i?

Pourquoi l’un est-il préféré à l’autre dans cet exemple?

Sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

Veuillez fournir des liens vers la documentation Ubuntu.

18
chili555

La commande Sudo su signifie "switch user" et vous permet de devenir un autre utilisateur. Il permet à un utilisateur autorisé d'exécuter une commande en tant que superutilisateur ou autre utilisateur, comme spécifié dans le fichier sudoers.

L'option –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 ou .login, seront lus par le shell. Si une commande est spécifiée, elle est transmise au shell pour être exécutée via l'option -c du shell. Si aucune commande n'est spécifiée, un shell interactif est exécuté.

Source: ManPage

14
Mitch

Sudo su ne change que l'utilisateur actuel en root. Les paramètres d'environnement (comme PATH) restent les mêmes.

Sudo -i crée un nouvel environnement comme si root venait juste de se connecter.

La différence est plus visible si vous utilisez d'autres utilisateurs. Après Sudo su bob vous serez bob, mais au même endroit. Après Sudo -i -u bob, vous serez bob, dans le répertoire de base de bob, avec le shell par défaut de bob et avec le .profile de bob et tous les autres scripts de connexion exécutés.

Voir man Sudo pour plus de détails sur ce que -i fait. Malheureusement, man su est léger en détails.


Trouvé une version de man su (à partir de login-1: 4.1.4.2 + svn3283-3ubuntu5.1) qui a la signification suivante:

$ PATH réinitialisé selon les options /etc/login.defs ENV_PATH ou ENV_SUPATH (voir ci-dessous);

$ IFS réinitialisé sur “<espace> <tab> <nouvelle ligne>”, s'il a été défini.

Notez que le comportement par défaut de l'environnement est le suivant:

Les variables d'environnement $ HOME, $ Shell, $ USER, $ LOGNAME, $ PATH et $ IFS sont réinitialisées.

Si --login n'est pas utilisé, l'environnement est copié, à l'exception des variables ci-dessus.

Si --login est utilisé, les variables d'environnement $ TERM, $ COLORTERM, $ DISPLAY et $ XAUTHORITY sont copiées si elles ont été définies.

D'autres environnements peuvent être définis par les modules PAM.

Ainsi, si et dans quelle mesure Sudo su modifie l'environnement dépend de votre distribution et de votre configuration. Ainsi, Sudo -i est théoriquement plus portable.

14
OrangeDog

Le problème principal est l’un des (pas si) paramètres d’environnement sains.

En utilisant Sudo su, le nouveau shell tire son environnement de l'utilisateur qui a émis la commande, ce qui peut poser problème.

Avec Sudo -i, vous obtenez un shell racine propre.

Voir Notes spéciales sur le sudo et les coquillages

Reste à noter qu'il est rarement nécessaire de créer un shell racine.

7
guntbert