chsh:“您可能无法更改‘用户名’的 shell。”

chsh:“您可能无法更改‘用户名’的 shell。”

我正在尝试更改用户的默认 shell。但我一直收到此错误:

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

我试图了解为什么我不能为我的用户更改 shell。

答案1

由于您确认这/usr/bin/chsh是 setuid root(因此应该允许非特权用户更改自己的登录 shell),因此这种行为最可能的解释是

  • 您当前的登录 shell 不在 /etc/shells 文件中

或者

  • 您当前的登录 shell 受到限制(很有可能/bin/rbash

前任。

$ 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

请注意,对于 root 将用户的登录 shell 设置为无效 shell(如这里)没有任何限制,并且这样做不会通过将其添加到 /etc/shells 文件而使无效 shell 变得有效。

$ 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

如果目标如果 /etc/shells 文件中没有 shell,您将收到不同的消息:

$ 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

答案2

您可以尝试使用命令 sudo usermod -s /bin/bash flimm

答案3

用户的登录 shell 保存在 中/etc/passwd,并受到保护,普通用户无法修改。您可以使用 来查看它getent passwd $USER
如果您的新 shell 列在 中/etc/shells,您可以使用以下命令进行更改:

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

与所有登录信息操作一样,请确保在另一个终端(Ctrl-Alt-F3)上有一个登录会话,以防您出现故障而无法登录。

相关内容