Я ожидал, что опция -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?
Пожалуйста, объясните мне.
$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
Пожалуйста, попробуйте:
sudo -H -u tanum bash -c 'echo $HOME'