Почему su сохраняет SHELL =/bin/bash в этом случае?

Я экспериментировал с переключающимися пользователями с su команда. Я смущен почему перенос su SHELL переменная среды пользователю monty. Осуществление показывают ниже:

vagrant@cats:/home$ cat /etc/passwd | grep -E "monty|vagrant"
vagrant:x:900:900:vagrant,,,:/home/vagrant:/bin/bash
monty:x:1000:1002::/home/monty:
vagrant@cats:/home$ cat /etc/default/useradd | grep SHELL
# The SHELL variable specifies the default login shell on your
SHELL=/bin/sh
vagrant@cats:/home$ echo $SHELL
/bin/bash
vagrant@cats:/home$ ssh monty@localhost
monty@localhost's password:
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-31-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage
Last login: Wed Sep 28 17:34:36 2016 from ::1
$ echo $SHELL
/bin/sh
$ exit
Connection to localhost closed.
vagrant@cats:/home$ su monty
Password:
monty@cats:/home$ echo $SHELL
/bin/bash
monty@cats:/home$ exit
exit

Как видно вышеупомянутого:

  • Существует по крайней мере два пользователя vagrant и monty
  • vagrant имеет указанную оболочку /bin/bash
  • monty имеет неуказанную оболочку, которая должна принять значение по умолчанию к /bin/sh как показано в /etc/default/useradd файл
    • это сохранено sshing в monty и проверку оболочки
  • кроме затем странно, почему использование su monty SHELL огибающая переменная остается как /bin/bash

Тот последний маркер является главной причиной, почему я смущен. Взгляд на man su кажется, не помогает также, не замечает -s флаг:

-s, --shell SHELL
           The shell that will be invoked.

           The invoked shell is chosen from (highest priority first):

               The shell specified with --shell.

               If --preserve-environment is used, the shell specified by the $SHELL environment variable.

               The shell indicated in the /etc/passwd entry for the target user.

               /bin/sh if a shell could not be found by any above method.

Потеря работоспособности по списку:

  • Я не использовал -s или --shell флаг, так, чтобы ничего не объяснял
  • Я также не использовал --preserve-environment переключатель, который объяснил бы ситуацию, но не делает, потому что я не использовал его
  • Нет никакой оболочки в /etc/passwd для целевого пользователя, который должен значить это значения по умолчанию для /bin/sh, таким образом, это не помогает
  • Это было бы, имеют смысл для отсутствия записи и всех вышеупомянутых сигарет или переключателей не заставлять ничего быть найденным, кроме затем /bin/sh использовался бы..., который это не, так, чтобы не помогал также

Таким образом, я действительно смущен, кажется, что я буквально вижу идеальную инверсию любого поведения, которое можно было ожидать после прочтения каждого файла конфигурации и записи человека по этой проблеме ха-ха.

Любил бы некоторую справку и руководство :)

Править: См. ответ и комментарий ниже. Также см. первый и предпоследний абзац в разделе DESCRIPTION в странице справочника

ОПИСАНИЕ

... Дополнительный аргумент - может использоваться для обеспечения среды, подобной тому, что ожидал бы пользователь, имел пользователя, зарегистрированного непосредственно.

...

Текущая среда передается новой оболочке...

2
задан 28 September 2016 в 21:23

1 ответ

su по умолчанию сохраняет среду текущего пользователя при переключении на другого пользователя, это включает оболочку текущего пользователя.

Для использования среды и конфигурации целевого пользователя необходимо запустить оболочка входа в систему путем добавления -l / --login опция или просто -:

su - monty
4
ответ дан 2 December 2019 в 02:17

Другие вопросы по тегам:

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