В Ubuntu 12.04, когда я не sudo -s
изменяю переменную $ HOME, поэтому, если мой обычный пользователь regularuser
, ситуация выглядит следующим образом:
$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser
Я давно отказался от Ubuntu, поэтому не уверен, но думаю, что это стандартное поведение. Итак, мои вопросы:
Q1. Как это сделать? Где конфиг?
Q2. Как мне это отключить?
Изменить: Спасибо за ответы, которые немного прояснили вещи, но я думаю, я должен добавить пару вопросов, чтобы получить ответ, который я ищу.
Q3. В Debian sudo -s
изменяет переменную $ HOME на /root
. Из того, что я получаю от ответов и man sudo
оболочка заливались sudo -s
это один дан в /etc/passwd
, верно?
Q4. Однако как в Ubuntu, так и в Debian оболочка, указанная /etc/passwd
для root, имеет вид /bin/bash
. В любой из систем я также не могу найти разницу между файлами .profile
или .bashrc
файлами в отношении $ HOME, так что поведение их sudo -s
отличается. Любая помощь в этом?
sudo
ведет себя по-разному между Debian и Ubuntu.sudo
, я думаю, что разница действительно есть по умолчанию. Тем не менее, я не ставлю на это, так как я нахожусь на коробке, которая была настроена кем-то другим и работает уже довольно давно. В любом случае, для всех, кто заинтересовался, я нашел security.stackexchange.com/questions/18369/… и bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140 .Ответы:
У Sudo есть много вариантов конфигурации во время компиляции. Вы можете перечислить настройки в вашей версии с помощью
sudo -V
. Одно из различий между конфигурацией в Debian wheezy и в Ubuntu 12.04 заключается в том, чтоHOME
переменная окружения сохраняется в Ubuntu, но не в Debian; оба дистрибутива стирают все переменные среды, за исключением нескольких, которые явно помечены как безопасные для сохранения. Таким образом,sudo -s
сохраняетHOME
в Ubuntu, а в DebianHOME
стирает, аsudo
затем устанавливает его в домашний каталог целевого пользователя.Вы можете изменить это поведение в
sudoers
файле. Запуститеvisudo
для редактированияsudoers
файла. Есть несколько соответствующих вариантов:env_keep
определяет, какие переменные среды сохраняются. Используйте,Defaults env_keep += "HOME"
чтобы сохранитьHOME
переменную среды вызывающего абонента илиDefaults env_keep -= "HOME"
стереть ее (и заменить ее домашним каталогом целевого пользователя).env_reset
определяет, сбрасываются ли переменные среды вообще. Сброс переменных среды часто необходим для правил, которые позволяют запускать определенную команду, но не имеет прямого преимущества в плане безопасности для правил, которые в любом случае позволяют выполнять произвольные команды.always_set_home
если установлено, вызываетHOME
переопределение, даже если оно было сохранено из-за того,env_reset
что оно отключено илиHOME
находится вenv_keep
списке. Эта опция не имеет эффекта, еслиHOME
она все равно не сохраняется.set_home
похожеalways_set_home
, но применяется только кsudo -s
, а не при вызовеsudo
с явной командой.Эти параметры могут быть установлены для заданного исходного пользователя, заданного целевого пользователя или заданной команды; см.
sudoers
руководство для деталей.Вы всегда можете выбрать переопределение
HOME
для данного вызоваsudo
, передав опцию-H
.Оболочка никогда не переопределит значение
HOME
. (Это установит,HOME
если это было не установлено, ноsudo
всегда устанавливаетHOME
так или иначе.)Если вы запускаете
sudo -i
,sudo
имитирует первоначальный вход в систему. Это включает в себя установкуHOME
в домашний каталог целевого пользователя и вызов оболочки входа .источник
Используйте
sudo -H -i
вместо того,sudo -s
чтобы получить интерактивную учетную запись root:От
man sudo
:источник
-i
подразумевает-H
.Это имеет мало общего с поведением
sudo
и во многом связано с различием между «оболочкой входа в систему» и «оболочкой без входа в систему». Быстрое решениекак видно из:
Как отмечено в руководстве sudo:
источник
HOME
или нет, все зависит от того, как настроен sudo./etc/sudoers
, что касается Debian и Ubuntu, нет ничего особенного в том, что касается $ HOME.always_set_home
иset_home
вsudoers
.Довольно популярный способ получения root shell также использует:
источник
sudo -i -H
, но не удалось установить глобальный пакет npm от git. Сsudo su -
этим работает! Спасибо.Чтобы избавиться от разного поведения
sudo -s
Ubuntu и Debian соответственно, вы можете использоватьsudo
оболочку (ответ на вопрос 4):источник