И Debian, и Ubuntu поставляют файл /etc/sudoers
, содержащий Defaults env_reset
, который сбрасывает переменные среды.
Однако поведение env_reset
было изменено с без касания $HOME
на сброс в дом целевого пользователя.
В выпусках до 19.04 Ubuntu исправил свою версию sudo
, чтобы сохранить предыдущее поведение (без изменений$HOME
):https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
Это было отменено в версии 19.10, и, начиная с этого момента, Ubuntu делает то же, что и исходный sudo
и все остальные дистрибутивы Linux, и изменяет $HOME
на поведение целевого пользователя. Подробнее см. в этом разделе вопросов и ответов на askubuntu.com:Как sudo обрабатывает $HOME по-другому с 19.10? . Для более ранних выпусков изменение не было выполнено, поэтому 18.04 LTS по-прежнему имеет специфическое поведение Ubuntu -.
Ниже приведен старый текст этого ответа, который относится к выпускам Ubuntu до 19.04, включая 18.04 LTS.
В 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:
If HOME is removed, then e.g. vim, bash, etc., will use /root/.vimrc, /root/.bashrc, etc rather than the user's ~/.vimrc, ~/.bashrc, etc. While it's a bad idea to run X clients via sudo, they too would likely look in the wrong locations for configuration files, and there's a chance that X11 clients may not even be able to connect to the X11 server if they are aimed at the wrong.Xauthority file.
Это сознательное решение разработчиков 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
Причина в том, что в glibc были внесены изменения, нарушившие совместимость со старыми компиляторами. Для этих компиляторов существует патч . Патч заменяет struct ucontext
на ucontext_t
в файлах libgcc/config/<arch>/linux-unwind.h
, где <arch>
— это i386
, aarch64
, alpha
и т. д.
Существует аналогичный вопрос о stackoverflow .
В дополнение к этим исправлениям мне также нужно было применить исправления для кода санитайзеров из здесь(их было достаточно )и здесь .
После этого ССЗ был окончательно построен.