Как sudo установлен не изменить $HOME в Ubuntu и как отключить это поведение?

Это было бы несколько пугающим, но можно отправить вывод любой команды к нескольким "терминалам". Например, для очистки всего TTYs, к которому у Вас есть доступ:

for tty in /dev/ttys00*; do clear > "$tty"; done # OS X (local)
for tty in /dev/pts/*; do clear > "$tty"; done # Linux (Ubuntu, via SSH)
42
22.09.2013, 11:16
5 ответов

Sudo имеет много параметров конфигурации времени компиляции. Можно перечислить настройки в версии с sudo -V. Одно из различий между конфигурацией в хрипящем Debian и в Ubuntu 12.04 то, что HOME переменная среды сохраняется в Ubuntu, но не в Debian; оба дистрибутива стирают все переменные среды за исключением некоторых, которые явно отмечены как безопасные сохранить. Таким образом sudo -s сохраняет HOME на Ubuntu, в то время как на Debian HOME стирается и 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 к корневому каталогу целевого пользователя и вызова оболочки входа в систему.

54
27.01.2020, 19:35

Использовать sudo -H -i вместо sudo -s для получения интерактивного входа в систему базируются оболочка:

sudo -H -i
cd
pwd -P  #  /private/var/root  (on Mac OS X 10.6.8)

От man sudo:

-H      The -H (HOME) option sets the HOME environment variable to
        the homedir of the target user (root by default) as
        specified in passwd(5).  By default, sudo does not modify
        HOME (see set_home and always_set_home in sudoers(5)).
17
27.01.2020, 19:35

Это имеет мало общего с поведением sudo и очень сделать с различием между "входом в систему окружают" и "оболочка невхода в систему". Быстрое исправление

$ sudo -i

как видно с:

$ sudo -s
# id
uid=0(root) gid=0(root) groups=0(root)
# echo $HOME
/home/msw
# exit
$ sudo -i
# echo $HOME
/root
# pwd
/root

Как отмечено в sudo руководстве:

-i (моделируют начальный вход в систему) опция выполняет оболочку, указанную записью базы данных пароля целевого пользователя как оболочка входа в систему. Это означает, что определенные для входа в систему файлы ресурсов, такие как .profile или .login будут считаны оболочкой. Если команда указана, она передается оболочке для выполнения через-c опцию оболочки. Если никакая команда не указана, интерактивная оболочка выполняется.

5
27.01.2020, 19:35
  • 1
    Спасибо за дополнительные детали они разъяснили вещи немного больше для меня. Угадайте, что я должен проверить различие между оболочками. Для любого читающего это, на той же ситуации со мной, проверьте это: unix.stackexchange.com/questions/38175 / … –  alxs 19.09.2013, 14:28
  • 2
    Нет, изменяется ли sudo HOME или не имеет все, чтобы сделать с тем, как sudo настроен. –  Gilles 'SO- stop being evil' 20.09.2013, 00:40
  • 3
    @Gilles: Так, как sudo настроен? В /etc/sudoers, нет ничего различного между Debian и Ubuntu, что касается $HOME. –  alxs 20.09.2013, 11:45
  • 4
    @alxs IIRC Debian и Ubuntu имеют различные значения по умолчанию времени компиляции. Можно переопределить их с опциями always_set_home и set_home в sudoers. –  Gilles 'SO- stop being evil' 20.09.2013, 11:55
  • 5
    @Gilles:Спасибо. это - точно ответ, который я ищу, и на том, почему это происходит и как вернуться он. Если Вы не будете возражать отправлять его, то я приму его как ответ. Я мог сделать это сам, но я не хочу приписывать себе его. –  alxs 20.09.2013, 12:05

Довольно популярный способ получить корневую оболочку также использует:

 $ sudo su - 
 # id
 uid=0(root) gid=0(root) groups=0(root)
 # pwd
 /root
2
27.01.2020, 19:35

Избавиться от другого поведения sudo -s на Ubuntu и Debian соответственно, Вы могли использовать a sudo обертка (отвечают на Q4):

sudos() {
   local PATH="$(getconf PATH)" root_homedir
   root_homedir="$(sudo -H sh -c 'printf "%s" "$HOME"')"
   sudo sh -c 'export HOME="$0"; exec sh -i' "$root_homedir"
   return 0
}

sudo -k
sudos
{
logname
whoami
id -un
id -ur
echo "PATH: $PATH"
}
exit
echo "PATH: $PATH"
0
27.01.2020, 19:35

Теги

Похожие вопросы