Cela dépend fortement de la façon dont vous appelez votre programme avec sudo
ou su
.
Par exemple sur le système sur lequel je suis en ce moment:
.bashrc
COMMAND $HOME $USER Env. $PATH
1. sudo -i (root) root root [1]
2. sudo -s (USER) root USER /home/${USER}/bin:[1]
3. sudo /bin/bash (USER) root USER /home/${USER}/bin:[1]
4. sudo su (root) root USER [1]:/usr/games:/usr/local/games
5. sudo su - (root) root root [1]
Où [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Les variables d'environnement sont réinitialisées pour 1 et 5, à partir de $ USER dans 2,3,4.
Ainsi , un script ou un programme qui est lancé avec une autre option peut voir différents $PATH
, $HOME
, sa coquille peut lire différents .bashrc
, .profile
et les variables de l' environnement. Il lit le fichier lié à la $HOME
. Chaque utilisateur peut modifier son environnement de manière différente (variables $PATH
, .bashrc, .profile, .bash_profile, alias ...). En particulier, un utilisateur peut avoir un ordre différent des répertoires dans son répertoire $PATH
et, en conséquence, un script peut exécuter une commande, par exemple in à la /home/$USER/bin
place de celle du chemin attendu de la racine.
Vous pouvez exécuter le programme sous sudo -i
car vous avez été connecté en tant que root su -
, mais vous pouvez avoir un comportement différent si vous l'exécutez avec sudo MyCommand
ou avec su -c MyCommand
.
De man su
:
Dans la partie description:
l'environnement actuel est transmis au nouveau shell . La valeur de $ PATH est réinitialisée sur / bin: / usr / bin pour les utilisateurs normaux, ou / sbin: / bin: / usr / sbin: / usr / bin pour le superutilisateur
...
Dans la partie options:
- , -l , --login
Fournit un environnement similaire à celui auquel l'utilisateur s'attendait s'il était connecté directement .
De l'homme sudo
-i , --login
Exécuter 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é. sudo
tente de passer au répertoire de base de cet utilisateur avant d'exécuter le shell. La commande est exécutée dans un environnement similaire à celui qu'un utilisateur recevrait lors de la connexion . La section Environnement de commande du manuel sudoers (5) explique en détail comment l'option -i affecte l'environnement dans lequel une commande est exécutée lorsque la stratégie sudoers est utilisée.