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.
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.
Réponses:
La sudo su
commande 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
sudo su
on 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.
sudo
s'exécute en su
tant 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.
sudo -i
ne demandera pas non plus le mot de passe de root, donc ce n'est pas pertinent pour la question.
sudo su
change 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 bob
tu seras bob, mais au même endroit. Après, sudo -i -u bob
vous serez bob, dans le répertoire personnel de bob, avec le shell par défaut de bob et avec bob .profile
et tous les autres scripts de connexion ayant été exécutés.
Voir man sudo
pour plus de détails sur ce qui se -i
passe. Malheureusement, man su
les 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 su
changements de l'environnement dépendent de votre distribution et de votre configuration. C'est donc sudo -i
théoriquement plus portable.
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 PWD
ne change pas?)
sudo su -
et sudo -i
?
$PATH
change lorsque j'utilise su
sans sudo
(en utilisant le mot de passe root). Selon info su
(ce qui pourrait être une meilleure chose à lier dans votre réponse), su
lit en effet l'entrée du mot de passe pour l'utilisateur que vous devenez. Il est possible que le $PATH
changement que j'observe dépend du système (je suis sur Debian 7).
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 man
page indique également que cela $PATH
est défini même s'il --preserve-environment
est utilisé. Donc je suppose que c'est vraiment juste une différence entre les différentes versions de su
.
/etc/pam.d/sudo
et /etc/pam.d/su
peut être configuré pour faire des choses complètement différentes ou exactement les mêmes.
Le problème principal est l'un des paramètres d'environnement (pas si) sains.
L'utilisation sudo su
du nouveau shell obtient son environnement de l'utilisateur qui émet la commande - ce qui peut être problématique.
Avec sudo -i
vous 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.
sudo -i
c'est similaire à sudo su -
, qui en fait ne reçoivent pas son environnement de l'utilisateur émettant la commande.
sudo su
contre sudo -i
.