14.04 未对 chsh 命令进行身份验证

14.04 未对 chsh 命令进行身份验证

我正在尝试将我的默认 shell 更改为 zsh。我已将条目正确放置在 /etc/shells 文件中。

我每次尝试使用此命令都以相同的错误消息结束:

chsh -s $(which zsh)
Password: ### after entering the correct password
chsh: PAM: Authentication failure

sudo chsh -s $(which zsh) ## yields the same result

我已使用 sudo 执行其他命令以确保不是密码失败,并且所有其他命令均能正常工作,唯独“chsh”不起作用。

完全不知所措。

附加信息:

我已根据 Oli 建议的代码在 /etc/shells 文件中附加了一行。

echo $SHELL 
/bin/bash

sudo chsh -s /usr/local/bin/zsh
Password:
chsh: PAM: Authentication failure

chsh -s /usr/local/bin/zsh
You may not change the shell for 'username'

仍然无法更改 shell。

答案1

PAM 对 的控制相当严格chsh。如您所见/etc/pam.d/chsh,它正在进行检查:

# 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

还有针对此项检查的手册页 ( man pam_shells),其中告诉我们以下内容:

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.

因此,听起来,你没有一行/usr/bin/zsh/etc/shells让我们添加一行:

echo $(which zsh) | sudo tee -a /etc/shells
chsh -s $(which zsh)

要么那样,要么你的当前的shell 没有列在那里。如果您被困在类似 的地方rbash,那可能不是列出的示例,这可能会阻止您更改 shell。

我测试了(zsh从中删除了该行/etc/shells,加载zsh并尝试了chsh),但看到了非常不同的错误消息:

You may not change the shell for 'oli'

所以可能不是这个。

答案2

我家里的机器上的情况是, /etc/shells不仅有 的多个条目/usr/bin/zsh,而且没有 的条目/bin/zsh

的测试which zsh | sudo tee -a /etc/shells 将会返回一个良好的结果。

快速手动编辑因此/bin/zsh唯一与 zsh 相关的条目足以纠正任何错误。

之后,我删除了/home/usr/.oh-my-zsh目录(我保留了我的.zshrc文件),并进行了完全重新安装,这消除了 chsh 问题。也许是某些错误的 oh-my-zsh 文件和错误的 shell 文件的组合导致了错误?

答案3

就我的情况而言,问题在于我创建的用户没有 shell(我的用户的密码文件中没有 shell)。我必须以 root 身份更改 shell。

答案4

补充Oli 的精彩解释一个简单的错误修复You may not change the shell for 'username',由这个答案

# Set the shell for the current user to '/bin/bash' in this example,
# which works even if the current shell is (unexpectedly) not listed in '/etc/shells'.
sudo usermod --shell /bin/bash $USER

相关内容