¿Por qué no cambia $ HOME si uso sudo?

15

Esperaba que la opción -H me diera el entorno del usuario objetivo.

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

Esto me permitiría decir:

sudo -u tanum ls ~

y obtener el listado del directorio de inicio del usuario objetivo. No es el caso. ¿Es esto causado por el env_resetdefecto en sudoers?

Si es así, ¿tiene algún efecto H? ¿Cuál es la forma más segura de anular este comportamiento?

Si no, ¿cuál es el efecto deseado de -H?

Por favor, enderezame.

Neil Best
fuente

Respuestas:

16

$HOMEy ~se expande por su shell, no son interpretados por echo.

En otras palabras, echono se ve $HOMEcomo un argumento. En realidad lo ve /home/nbest. Por lo tanto, los siguientes comandos son exactamente idénticos (en su caso):

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

Lo que sea que intentes ( -H, -i...) nunca obtendrás el comportamiento deseado. Porque $HOMEes reemplazado por su shell y su shell se ejecuta como su usuario. sudono afecta su shell de ninguna manera.


Para evitar este 'problema' (que en realidad es una característica), puede iniciar una nueva subshell:

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

(Tenga en cuenta que estoy usando comillas simples para evitar la expansión). De esta manera, el nuevo shell shse ejecutará como tanum de usuario e imprimirá su directorio de inicio.


Otra alternativa es usar ~username, que se expande al hogar de ese usuario, sin la necesidad de usar sudoo su. Tratar:

nbest@geo:~$ echo ~tanum
Andrea Corbellini
fuente
1
Por supuesto. ¡Que embarazoso! sudo do what I mean
Neil Best
1
Esto no funciona para mi. por ejemplo , sudo -H -u buildbot bash -c "echo $HOME"me da /home/ubuntu, que es el usuario predeterminado en algunas imágenes de Ubuntu.
Cerin
@Cerin usa comillas simples para evitar la expansión:sh -c 'echo $HOME'
Andrea Corbellini
3

Por favor, inténtalo:

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