Zarówno Debian, jak i Ubuntu dostarczają /etc/sudoers
plik, który zawiera Defaults env_reset
, który resetuje zmienne środowiskowe.
Jednak zachowanie env_reset
zmieniono z nie dotykania $ HOME na zresetowanie go do domu docelowego użytkownika.
Ubuntu postanowił załatać swoją wersję, sudo
aby zachować poprzednie zachowanie:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
W Ubuntu, aby zresetować zmienną środowiskową $ HOME do użytkownika docelowego, należy ustawić albo Defaults always_set_home
albo Defaults set_home
(w takim przypadku sudo -s
zaktualizowana zostanie tylko HOME) /etc/sudoers
.
Ten błąd w narzędziu do śledzenia Ubuntu ma trochę uzasadnienia, że nie ustawiono $ HOME w sudo:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
Zobacz komentarz nr 4:
Jeśli program HOME zostanie usunięty, np. Vim, bash itp. Użyje /root/.vimrc, /root/.bashrc itp. Zamiast ~ / .vimrc, ~ / .bashrc użytkownika. Chociaż jest to zły pomysł aby uruchomić klientów X za pośrednictwem sudo, oni również prawdopodobnie szukaliby niewłaściwych lokalizacji dla plików konfiguracyjnych, i istnieje szansa, że klienci X11 mogą nawet nie być w stanie połączyć się z serwerem X11, jeśli są one skierowane na niewłaściwy plik .Xauthority.
Jest to świadoma decyzja deweloperów Ubuntu.
Ta odpowiedź zawiera więcej szczegółów na temat opcji sudoers, takich jak always_set_home
:
https://unix.stackexchange.com/a/91572/281844
W twoim pytaniu jest drugi problem, sudo echo $HOME
który wciąż wyświetla dom użytkownika nawet w Debianie.
Dzieje się tak, ponieważ powłoka rozwija się $HOME
przed uruchomieniem sudo
polecenia.
Więc to:
$ sudo echo $HOME
Najpierw jest rozszerzany przez powłokę do:
$ sudo echo /home/user
A następnie sudo wykonuje się echo /home/user
jako root ...
To również powinno wykazać różnicę:
$ sudo bash -c 'echo $HOME'
/root
Lub zdobądź pełną powłokę główną i zobacz tam zmienną środowiskową:
$ sudo -s
# echo $HOME
/root