我正在尝试使用 chsh 更改 shell,但收到错误

我正在尝试使用 chsh 更改 shell,但收到错误

我无法使用 chsh 将我的 bash shell 更改为 fish,因为它要求输入密码,而这不是我的 root 密码,输入一些内容后,我得到了以下信息:chsh: PAM: Authentication failure

这是我的/etc/pam.d/chsh配置文件:

#
# The PAM configuration file for the Shadow `chsh' service
#

# 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            sufficent       pam_shells.so

# This allows root to change user shell without being
# prompted for a password
auth            sufficent       pam_rootok.so

# The standard Unix authentication modules, used with
# NIS (man nsswitch) as well as normal /etc/passwd and
# /etc/shadow entries.
@include common-auth
@include common-account
@include common-session

我的/etc/shells文件也包含/bin/fish/usr/bin/fish,它仍然要求输入密码。我也知道我的sudo密码,但在我输入密码后,它要求输入另一个我不知道的密码。像这样:

gergo@odin:~$ sudo chsh -s /usr/bin/fish
[sudo] password for gergo:  
Password:
chsh: PAM: Authentication failure 

如果有人能想到什么请告诉我。

答案1

在 中/etc/pam.d/chsh,您需要更改:

auth            sufficent       pam_shells.so

到:

auth            required       pam_shells.so

并改变:

auth            sufficent       pam_rootok.so

到:

auth            sufficient       pam_rootok.so

然后,无需 更改您自己的 shell sudo,如下所示:

chsh -s /bin/fish

简要说明:

sufficent不是有效的 PAM 模块控制标志并且必须更正为sufficient,而且,您不希望它出现在第一个模块中,因为它将禁用进一步的正确用户身份验证(例如要求输入密码) 立即将成功返回给应用程序并阻止进一步的堆栈处理,所以使用required... 另外,使用sudo chsh -s /usr/bin/fish而不指定用户就像sudo chsh -s /usr/bin/fish username会改变root的登录shell而不是你的,你不需要sudo改变你自己的登录shell,所以不要使用它。

相关内容