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

19

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.

chili555
la source
Veuillez reconsidérer votre choix de réponses «acceptées». Le vote le plus bas est en fait le seul correct.
Kyle Strand

Réponses:

15

La sudo sucommande signifie «changer d'utilisateur» 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 exécution via l'option ‑c du shell. Si aucune commande n'est spécifiée, un shell interactif est exécuté.

Source: ManPage

Mitch
la source
1
"L'utilisation de su crée un problème de sécurité et est essentiellement dangereuse." Quelle?
Arrêtez de nuire à Monica
1
Si vous exécutez, sudo suon vous demande votre mot de passe, pas le mot de passe root. L'utilisateur root n'a même pas besoin d'avoir un mot de passe. Quoi qu'il en soit, si un administrateur utilise le mot de passe root, cela n'implique pas que tous les utilisateurs réguliers le connaissent.
Arrêtez de nuire à Monica
2
Non, ce ne sera pas le cas. sudos'exécute en sutant que root, et root peut suà tout utilisateur sans connaître leur mot de passe. Les malentendus fondamentaux sur le fonctionnement du système méritent un recul de l'OMI.
Arrêtez de nuire à Monica
3
Et la suppression de vos commentaires ne fait qu'ajouter à la confusion.
Arrêtez de nuire à Monica
1
Vous ne faites pas beaucoup mieux. sudo -ine demandera pas non plus le mot de passe de root, donc ce n'est pas pertinent pour la question.
Arrêtez de nuire à Monica
14

sudo suchange uniquement 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 de se connecter.

La différence est plus notable si vous utilisez d'autres utilisateurs. Après sudo su bobtu seras bob, mais au même endroit. Après, sudo -i -u bobvous serez bob, dans le répertoire personnel de bob, avec le shell par défaut de bob et avec bob .profileet tous les autres scripts de connexion ayant été exécutés.

Voir man sudopour plus de détails sur ce qui se -ipasse. Malheureusement, man sules détails sont légers.


Trouvé une version de man su(de login-1: 4.1.4.2 + svn3283-3ubuntu5.1) qui dit ce qui suit:

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

$ IFS est réinitialisé sur «<espace> <tab> <nouvelle>», 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 des modules PAM.

Donc, si et dans quelle mesure les sudo suchangements de l'environnement dépendent de votre distribution et de votre configuration. C'est donc sudo -ithéoriquement plus portable.

Arrêtez de nuire à Monica
la source
su fait les paramètres d'environnement de changement, et peut être utilisé pour simuler une connexion à l' aide -ou -l. Même sans -l, $PATH est changé. Testez ces affirmations avant de les faire! (Vouliez-vous dire que cela PWDne change pas?)
Kyle Strand
La vraie question est, y a-t-il une différence entre sudo su -et sudo -i?
Kyle Strand
1
Vous y réfléchissez clairement et effectuez actuellement des tests dans le shell, donc je m'excuse pour mon commentaire "tester ces revendications". Cela dit, sur mon système, j'observe que cela $PATHchange lorsque j'utilise susans sudo(en utilisant le mot de passe root). Selon info su(ce qui pourrait être une meilleure chose à lier dans votre réponse), sulit en effet l'entrée du mot de passe pour l'utilisateur que vous devenez. Il est possible que le $PATHchangement que j'observe dépend du système (je suis sur Debian 7).
Kyle Strand
1
Hmmm. Mon man su(qui est plus long que celui auquel vous avez lié) dit qu'il en fait partie shadow-utils 4.1.5.1. Ma manpage indique également que cela $PATHest défini même s'il --preserve-environmentest utilisé. Donc je suppose que c'est vraiment juste une différence entre les différentes versions de su.
Kyle Strand
1
Le comportement est également affecté par votre configuration PAM. /etc/pam.d/sudoet /etc/pam.d/supeut être configuré pour faire des choses complètement différentes ou exactement les mêmes.
Arrêtez de nuire à Monica le
7

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

L'utilisation sudo sudu nouveau shell obtient son environnement de l'utilisateur qui émet la commande - ce qui peut être problématique.

Avec sudo -ivous obtenez une coque racine propre.

Voir les notes spéciales sur le sudo et les coquilles

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

guntbert
la source
Les "notes spéciales" que vous liez pour dire que sudo -ic'est similaire à sudo su -, qui en fait ne reçoivent pas son environnement de l'utilisateur émettant la commande.
Kyle Strand
@KyleStrand thx pour avoir signalé - il était une faute de frappe, la question est vraiment sudo sucontre sudo -i.
guntbert