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.
$HOME
et ~
sont développés par votre Shell, ils ne sont pas interprétés par echo
name__.
En d'autres termes, echo
ne 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. Sudo
n’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 sh
s'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 Sudo
ou su
name__. Essayer:
nbest@geo:~$ echo ~tanum
S'il vous plaît essayez:
Sudo -H -u tanum bash -c 'echo $HOME'