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

15

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

nbest @ geo: ~ $ sudo -H -u tanum echo $ HOME
/ accueil / nbest
nbest @ geo: ~ $ sudo -u tanum echo $ HOME
/ accueil / nbest
nbest @ geo: ~ $ sudo -i -u tanum echo $ HOME
/ accueil / nbest
nbest @ geo: ~ $ sudo -H -i -u tanum echo $ HOME
/ accueil / nbest

Cela me permettrait de dire:

sudo -u tanum ls ~

et obtenez la liste du répertoire personnel de l'utilisateur cible. Pas le cas. Est-ce dû à la env_resetvaleur par défaut de sudoers?

Si oui, -H a-t-il un effet? Quelle est la manière la plus sûre de remplacer ce comportement?

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

Veuillez me redresser.

Neil Best
la source

Réponses:

16

$HOMEet ~se développer par votre shell, ils ne sont pas interprétés par echo.

En d'autres termes, echone considère pas $HOMEcomme un 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

Tout ce que vous essayez ( -H, -i, ...) vous ne serez jamais obtenir le comportement voulu. Car $HOMEest remplacé par votre shell et votre shell s'exécute en tant qu'utilisateur. sudon'affecte en aucun cas 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 l'expansion.) De cette façon, le nouveau shell shs'exécutera en tant qu'utilisateur tanum et imprimera son répertoire personnel.


Une autre alternative est d'utiliser ~username, qui est étendue au domicile de cet utilisateur, sans avoir besoin d'utiliser sudoou su. Essayer:

nbest@geo:~$ echo ~tanum
Andrea Corbellini
la source
1
Bien sûr. Que c'est embarrassant! sudo do what I mean
Neil Best
1
Ça ne marche pas pour moi. sudo -H -u buildbot bash -c "echo $HOME"me donne par exemple /home/ubuntu, qui est l'utilisateur par défaut sur certaines images Ubuntu.
Cerin
@Cerin utilise des guillemets simples pour empêcher l'expansion:sh -c 'echo $HOME'
Andrea Corbellini
3

S'il vous plaît essayez:

sudo -H -u tanum bash -c 'echo $HOME'
tpf
la source