Я экспериментировал с переключающимися пользователями с 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
файл 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 в странице справочника
ОПИСАНИЕ
... Дополнительный аргумент - может использоваться для обеспечения среды, подобной тому, что ожидал бы пользователь, имел пользователя, зарегистрированного непосредственно.
...
Текущая среда передается новой оболочке...
su
по умолчанию сохраняет среду текущего пользователя при переключении на другого пользователя, это включает оболочку текущего пользователя.
Для использования среды и конфигурации целевого пользователя необходимо запустить оболочка входа в систему путем добавления -l
/ --login
опция или просто -
:
su - monty