
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/chsh
es 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/passwd
y 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.