chsh: "No puedes cambiar el shell de 'nombre de usuario'."

chsh: "No puedes cambiar el shell de 'nombre de usuario'."

Estoy intentando cambiar el shell predeterminado para mi usuario. Pero sigo recibiendo este error:

$ chsh
You may not change the shell for 'flimm'.
$ chsh -s "$(which bash)"
You may not change the shell for 'flimm'.

Estoy tratando de entender por qué no puedo cambiar el shell de mi usuario.

Respuesta1

Dado que confirmó que /usr/bin/chshes setuid root (y por lo tanto debería permitir a los usuarios sin privilegios cambiar su propio shell de inicio de sesión), la explicación más probable para este comportamiento es que

  • su shell de inicio de sesión actual no estaba en el archivo /etc/shells

o

  • su shell de inicio de sesión actual estaba restringido (muy probablemente /bin/rbash)

Ex.

$ grep fish /etc/shells || echo "invalid shell"
invalid shell
$ 
$ sudo chsh -s /usr/bin/fish testuser
$ 
$ su - testuser
Password:
Welcome to fish, the friendly interactive shell
testuser@t400s ~> chsh -s /bin/bash
You may not change the shell for 'testuser'.
testuser@t400s ~> exit

Tenga en cuenta que no hay ninguna restricción para que el root configure el shell de inicio de sesión de un usuario en un shell no válido (como aquí), y hacerlo no hace que un shell no válido sea válido al agregarlo al archivo /etc/shells.

$ sudo chsh -s /bin/rbash testuser
$     
$ su - testuser
Password:
testuser@t400s:~$
testuser@t400s:~$ chsh
You may not change the shell for 'testuser'.
testuser@t400s:~$ exit

Si elobjetivoshell estaba ausente en el archivo /etc/shells, habría recibido un mensaje diferente:

$ sudo chsh -s /bin/bash testuser
$ 
$ su - testuser
Password:
testuser@t400s:~$ chsh -s /usr/bin/fish
Password:
chsh: /usr/bin/fish is an invalid shell

Respuesta2

Puedes probar con el comando sudo usermod -s /bin/bash flimm

Respuesta3

El shell de inicio de sesión del usuario se mantiene en /etc/passwdy está protegido contra modificaciones por parte de usuarios normales. Puedes verlo con getent passwd $USER.
Si su nuevo shell aparece en /etc/shells, puede cambiarlo con:

sudo chsh -s $(type -p bash) $USER

Al igual que con todas las manipulaciones de la información de inicio de sesión, asegúrese de tener una sesión de inicio de sesión en otra terminal ( Ctrl-Alt-F3) en caso de que rompa algo y no pueda iniciar sesión.

información relacionada