
Estou tentando alterar o shell padrão do meu usuário. Mas continuo recebendo este erro:
$ chsh
You may not change the shell for 'flimm'.
$ chsh -s "$(which bash)"
You may not change the shell for 'flimm'.
Estou tentando entender por que não posso alterar o shell do meu usuário.
Responder1
Como você confirmou que /usr/bin/chsh
é setuid root (e, portanto, deve permitir que usuários não privilegiados alterem seu próprio shell de login), a explicação mais provável para esse comportamento é que
- seu shell de login atual não estava no arquivo /etc/shells
ou
- seu shell de login atual foi restrito (provavelmente
/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
Observe que não há restrição para o root definir o shell de login de um usuário como um shell inválido (como aqui), e isso não torna um shell inválido válido adicionando-o ao arquivo /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
Se oalvoshell estava ausente do arquivo /etc/shells, você teria recebido uma mensagem 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
Responder2
Você pode tentar com o comando sudo usermod -s /bin/bash flimm
Responder3
O shell de login do usuário é mantido /etc/passwd
e protegido contra modificações por usuários regulares. Você pode ver isso com getent passwd $USER
.
Se o seu novo shell estiver listado em /etc/shells
, você poderá alterá-lo com:
sudo chsh -s $(type -p bash) $USER
Tal como acontece com todas as manipulações de informações de login, certifique-se de ter uma sessão de login em outro terminal ( Ctrl-Alt-F3) caso você quebre alguma coisa e não consiga fazer login.