web-dev-qa-db-ja.com

14.04 chshコマンドで認証されない

デフォルトのシェルを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の推奨コードごとに1行を/ 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'

それでもシェルを変更することはできません。

3
RCF

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)

それまたはあなたのcurrent Shellがリストされていません。 rbashのようなものにこだわっている場合、それはリストされた例ではなく、シェルの変更を妨げる可能性があります。

私はテストしました(/etc/shellsからzsh行を削除し、zshをロードし、chshを試みましたが、非常に異なるエラーメッセージが表示されました。

You may not change the Shell for 'oli'

おそらくこれではないでしょう。

5
Oli

私の自宅のマシンの状況は/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ファイルの組み合わせがエラーを作成したのでしょうか?

0
Jaxor