O comando su não definiu o valor BASH_VERSION e não carregou o perfil

O comando su não definiu o valor BASH_VERSION e não carregou o perfil

Eu tenho uma versão do servidor Ubuntu 20.04 LTS e tenho um problema estranho ao criar um novo usuário e usá-lo no shell a partir de uma conexão ssh. As etapas para reproduzi-lo:

  1. Use a conta root para criar um novo usuário usando useradd --create-home test.
  2. Faça login do usuário root para testar usando su test.

O resultado:

root@server:~# useradd --create-home test;
root@server:~# echo $BASH_VERSION
5.0.17(1)-release
root@server:~# su test;
$ echo $BASH_VERSION
$

O prompt não está configurado, as variáveis ​​de ambiente não estão carregadas, o preenchimento automático não está funcionando, os aliases não estão funcionando, é como se os arquivos .profile e .bashrc não existissem, mas eles existem e têm suas permissões configuradas corretamente:

root@server:/home/test# md5sum /etc/skel/.profile ./.profile 
f4e81ade7d6f9fb342541152d08e7a97  /etc/skel/.profile
f4e81ade7d6f9fb342541152d08e7a97  ./.profile
root@server:/home/test# md5sum /etc/skel/.bashrc ./.bashrc
1f98b8f3f3c8f8927eca945d59dcc1c6  /etc/skel/.bashrc
1f98b8f3f3c8f8927eca945d59dcc1c6  ./.bashrc
root@server:/home/test# ls -lah
total 24K
drwxr-xr-x  3 test test 4.0K Sep 18 13:18 .
drwxr-xr-x  9 root root 4.0K Sep 18 13:17 ..
-rw-r--r--  1 test test  220 Feb 25  2020 .bash_logout
-rw-r--r--  1 test test 3.7K Feb 25  2020 .bashrc
-rw-r--r--  1 test test  807 Feb 25  2020 .profile

Por que o perfil não carrega quando faço login como usuário de teste?

Responder1

Como diz a documentação su:

Para compatibilidade com versões anteriores, suo padrão é não alterar o diretório atual e definir apenas as variáveis ​​de ambiente HOME e SHELL (mais USER e LOGNAME se o usuário de destino não for root). É recomendado sempre utilizar a --loginopção (ao invés de seu atalho -) para evitar efeitos colaterais causados ​​pela mistura de ambientes.

Quando sob --loginou -l, sutambém executa umConecte-seshell, que por sua vez fornece o .profile( .bashrcdeve ser sempre fornecido).

Para ver quais arquivos estão carregados, insira uma linha simples no início deles:

echo "$BASH_SOURCE" >&2

informação relacionada