web-dev-qa-db-fra.com

Pourquoi $ HOME ne change-t-il pas si j'utilise sudo?

Je m'attendais à ce que l'option -H me donne l'environnement de l'utilisateur cible.

 nbest @ geo: ~ $ Sudo -H -u tanum echo $ HOME 
/home/nbest 
 nbest @ geo: ~ $ Sudo -u tanum echo $ HOME 
/home/nbest 
 nbest @ geo: ~ $ Sudo -i -u tanum echo $ HOME 
/home/nbest 
 nbest @ geo: ~ $ Sudo -H - i -u tanum echo $ HOME 
/home/nbest 

Cela me permettrait de dire:

Sudo -u tanum ls ~

et obtenez la liste du répertoire de base de l'utilisateur cible. Pas le cas. Est-ce causé par le env_reset default dans sudoers?

Si oui, -H a-t-il un effet? Quel est le moyen le plus sûr d’annuler ce comportement?

Si non, quel est l'effet recherché de -H?

S'il vous plaît mettez-moi bien.

15
Neil Best

$HOME et ~ sont développés par votre Shell, ils ne sont pas interprétés par echoname__.

En d'autres termes, echone voit pas $HOME en tant qu'argument. Il voit réellement /home/nbest. Par conséquent, les commandes suivantes sont exactement identiques (dans votre cas):

nbest@geo:~$ Sudo -H -u tanum echo $HOME
nbest@geo:~$ Sudo -H -u tanum echo /home/nbest

Quoi que vous essayiez (-H, -i, ...), vous n'obtiendrez jamais le comportement souhaité. Parce que $HOME est remplacé par votre Shell et que votre Shell s'exécute en tant qu'utilisateur. Sudon’affecte en aucune façon votre Shell.


Pour contourner ce "problème" (qui est en fait une fonctionnalité), vous pouvez démarrer un nouveau sous-shell:

nbest@geo:~$ Sudo -H -u tanum sh -c 'echo $HOME'

(Notez que j'utilise des guillemets simples pour éviter toute expansion.) Ainsi, le nouveau Shell shs'exécutera en tant qu'utilisateur tanum et affichera son répertoire personnel.


Une autre alternative consiste à utiliser ~username, qui est étendu au domicile de cet utilisateur, sans qu'il soit nécessaire d'utiliser Sudoou suname__. Essayer:

nbest@geo:~$ echo ~tanum
16
Andrea Corbellini

S'il vous plaît essayez:

Sudo -H -u tanum bash -c 'echo $HOME'
3
tpf