И Debian, и Ubuntu поставляют /etc/sudoers
файл, который содержит Defaults env_reset
, который сбрасывает переменные окружения.
Тем не менее, поведение env_reset
было изменено с не касаясь $ HOME, чтобы сбросить его на дом целевого пользователя.
Ubuntu решила исправить их версию, sudo
чтобы сохранить прежнее поведение:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
В Ubuntu, чтобы сбросить переменную среды $ HOME для целевого пользователя, нужно установить либо их, Defaults always_set_home
либо Defaults set_home
(в этом случае только sudo -s
HOME обновится) /etc/sudoers
.
Эта ошибка в трекере Ubuntu имеет еще несколько причин, по которым не нужно устанавливать $ HOME в sudo:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
Смотрите комментарий № 4:
Если HOME удален, то, например, vim, bash и т. Д. Будет использовать /root/.vimrc, /root/.bashrc и т. Д., А не ~ / .vimrc, ~ / .bashrc и т. Д. Хотя это плохая идея чтобы запускать X-клиенты через sudo, они также, вероятно, будут искать неправильные места для файлов конфигурации, и есть вероятность, что клиенты X11 могут даже не иметь возможности подключиться к серверу X11, если они нацелены на неправильный файл .Xauthority.
Это сознательное решение разработчиков Ubuntu.
Этот ответ содержит более подробную информацию о параметрах sudoers, таких как always_set_home
:
https://unix.stackexchange.com/a/91572/281844
В вашем вопросе есть вторая проблема, которая по- sudo echo $HOME
прежнему отображает домашнюю страницу пользователя даже в Debian.
Это происходит потому, что оболочка расширяется $HOME
перед запуском sudo
команды.
Итак, это:
$ sudo echo $HOME
Сначала расширяется оболочкой в:
$ sudo echo /home/user
И тогда sudo выполняется echo /home/user
как root ...
Это также должно продемонстрировать разницу:
$ sudo bash -c 'echo $HOME'
/root
Или получите полноценную корневую оболочку и посмотрите там переменную окружения:
$ sudo -s
# echo $HOME
/root