
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:
- Use a conta root para criar um novo usuário usando
useradd --create-home test
. - 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,
su
o 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--login
opção (ao invés de seu atalho-
) para evitar efeitos colaterais causados pela mistura de ambientes.
Quando sob --login
ou -l
, su
também executa umConecte-seshell, que por sua vez fornece o .profile
( .bashrc
deve ser sempre fornecido).
Para ver quais arquivos estão carregados, insira uma linha simples no início deles:
echo "$BASH_SOURCE" >&2