Eu estava experimentando com a troca de usuários com o comando su
. Estou confuso porque su carregando a variável de ambiente SHELL
para um usuário monty
. O exercício é mostrado abaixo:
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
Como pode ser visto acima:
- Existem pelo menos dois usuários
vagrant
e monty
-
vagrant
tem um shell especificado de /bin/bash
-
monty
tem um shell não especificado que deve usar como padrão /bin/sh
, conforme mostrado no arquivo /etc/default/useradd
- é feito o backup por sshing em monty e verificando o shell
- exceto que, estranhamente, por que usar
su monty
a variável SHELL
env permanece como /bin/bash
Essa última bala é a principal razão pela qual estou confuso. Observar man su
não parece ajudar, observe o sinal -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.
Descendo a lista:
- Eu não usei o sinal
-s
ou --shell
, então isso não explica nada
- Eu também não usei a opção
--preserve-environment
que explicaria a situação, mas não porque não a usei
- Não há shell no
/etc/passwd
para o usuário de destino, o que significa que o padrão é /bin/sh
, de modo que não ajuda
- Seria sensato para a falta de uma entrada e todos os cigarros ou interruptores acima para causar nada a ser encontrado, exceto então
/bin/sh
seria usado ... o que não é, então isso não acontece ajuda
Então, estou realmente confuso, parece que estou literalmente vendo uma inversão perfeita de qualquer comportamento que se poderia esperar depois de ler cada arquivo de configuração e a entrada de um cara nessa questão haha.
Adoraria alguma ajuda e orientação:)
Editar: veja a resposta e o comentário abaixo. Veja também o primeiro e o segundo ao último parágrafo na seção DESCRIÇÃO da página man
DESCRIÇÃO
... O argumento opcional - pode ser usado para fornecer um ambiente semelhante ao que o usuário esperaria se o usuário tivesse feito login diretamente.
...
O ambiente atual é passado para o novo shell ...