Почему $ HOME не меняется, если я использую sudo?

15

Я ожидал, что опция -H даст мне среду целевого пользователя.

nbest @ geo: ~ $ sudo -H -u tanum echo $ HOME
/ Главная / nbest
nbest @ geo: ~ $ sudo -u tanum echo $ HOME
/ Главная / nbest
nbest @ geo: ~ $ sudo -i -u tanum echo $ HOME
/ Главная / nbest
nbest @ geo: ~ $ sudo -H -i -u tanum echo $ HOME
/ Главная / nbest

Это позволило бы мне сказать:

sudo -u tanum ls ~

и получите список домашних каталогов целевого пользователя. Не тот случай. Это вызвано по env_resetумолчанию в sudoers?

Если да, то -Н оказывает какое-либо влияние? Какой самый безопасный способ изменить это поведение?

Если нет, то каков предполагаемый эффект -H?

Пожалуйста, поправьте меня.

Нил Бест
источник

Ответы:

16

$HOMEи ~расширяются вашей оболочкой, они не интерпретируются echo.

Другими словами, echoне видит $HOMEв качестве аргумента. Это на самом деле видит /home/nbest. Поэтому следующие команды абсолютно идентичны (в вашем случае):

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

Что бы вы ни попробовать ( -H, -i, ...) , вы никогда не получите хотел поведение. Потому $HOMEчто заменяется вашей оболочкой и ваша оболочка запускается как ваш пользователь. sudoникак не влияет на вашу оболочку.


Чтобы обойти эту «проблему» (которая на самом деле является функцией), вы можете запустить новую подоболочку:

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

(Обратите внимание, что я использую одинарные кавычки, чтобы избежать расширения.) Таким образом, новая оболочка shбудет работать от имени пользователя tanum и печатать его домашний каталог.


Другой альтернативой является использование ~username, которое расширяется до дома этого пользователя, без необходимости использования sudoили su. Пытаться:

nbest@geo:~$ echo ~tanum
Андреа Корбеллини
источник
1
Конечно. Как неловко! sudo do what I mean
Нил Бест
1
Это не работает для меня. Например, sudo -H -u buildbot bash -c "echo $HOME"дает мне /home/ubuntu, который является пользователем по умолчанию на некоторых изображениях Ubuntu.
Cerin
@Cerin использует одинарные кавычки для предотвращения расширения:sh -c 'echo $HOME'
Андреа Корбеллини
3

Пожалуйста попробуйте:

sudo -H -u tanum bash -c 'echo $HOME'
ТПФ
источник