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

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

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

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

sudo -u tanum ls ~

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

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

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

Пожалуйста, объясните мне.

15
задан 28 August 2013 в 20:06

2 ответа

$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
0
ответ дан 28 August 2013 в 20:06

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

sudo -H -u tanum bash -c 'echo $HOME'
0
ответ дан 28 August 2013 в 20:06

Другие вопросы по тегам:

Похожие вопросы: