І Debian, і Ubuntu доставляють /etc/sudoers
файл, який містить Defaults env_reset
, який скидає змінні середовища.
Однак поведінку програми env_reset
було змінено: не торкатися $ HOME до скидання її до дому цільового користувача.
Ubuntu вирішив виправити свою версію, sudo
щоб зберегти попередню поведінку:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
Для відновлення змінної середовища $ HOME на цільового користувача в Ubuntu потрібно встановити Defaults always_set_home
або Defaults set_home
( або в такому випадку sudo -s
оновити HOME) у своїх /etc/sudoers
.
Ця помилка в трекері Ubuntu має ще одне обгрунтування щодо встановлення $ HOME в судо:
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