
Tengo una versión de servidor Ubuntu 20.04 LTS y tengo un problema extraño al crear un nuevo usuario y usarlo en el shell desde una conexión ssh. Los pasos para reproducirlo:
- Utilice la cuenta raíz para crear un nuevo usuario usando
useradd --create-home test
. - Inicie sesión como usuario root para probar usando
su test
.
El resultado:
root@server:~# useradd --create-home test;
root@server:~# echo $BASH_VERSION
5.0.17(1)-release
root@server:~# su test;
$ echo $BASH_VERSION
$
El mensaje no está configurado, las variables de entorno no están cargadas, el autocompletado no funciona, los alias no funcionan, es como si el archivo .profile y .bashrc no existieran pero sí existen y tienen sus permisos configurados correctamente:
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 qué el perfil no se carga cuando inicio sesión como usuario de prueba?
Respuesta1
su
Como dice la documentación de :
Para compatibilidad con versiones anteriores,
su
el valor predeterminado no cambia el directorio actual y solo establece las variables de entorno HOME y SHELL (más USER y LOGNAME si el usuario objetivo no es root). Se recomienda utilizar siempre la--login
opción (en lugar de su acceso directo-
) para evitar efectos secundarios provocados por la mezcla de ambientes.
Cuando está bajo --login
o -l
, su
también ejecuta unaccesoshell, que a su vez genera el .profile
( .bashrc
debe obtenerse siempre).
Para ver qué archivos están cargados, inserte una línea simple al principio de ellos:
echo "$BASH_SOURCE" >&2