O PAM tem um strong controle sobre chsh . Como você pode ver o formulário /etc/pam.d/chsh , ele está fazendo uma verificação:
# This will not allow a user to change their shell unless
# their current one is listed in /etc/shells. This keeps
# accounts with special shells from changing them.
auth required pam_shells.so
Há também uma página man para essa verificação ( man pam_shells ), que nos diz o seguinte:
pam_shells is a PAM module that only allows access to the system if the users shell is
listed in /etc/shells.
It also checks if /etc/shells is a plain file and not world writable.
Então, ao que parece, você não tem uma linha /usr/bin/zsh em /etc/shells . Vamos adicionar um:
echo $(which zsh) | sudo tee -a /etc/shells
chsh -s $(which zsh)
Ou isso ou o seu atual shell não está listado lá. Se você está preso em algo como rbash , isso pode não ser um exemplo listado e isso pode impedir você de alterar o shell.
Eu testei (removi a linha zsh de /etc/shells , carreguei zsh e tentei chsh ), mas vi uma mensagem de erro muito diferente:
You may not change the shell for 'oli'
Então provavelmente não é isso.