chsh: 「'username' のシェルを変更することはできません。」

chsh: 「'username' のシェルを変更することはできません。」

ユーザーのデフォルト シェルを変更しようとしています。しかし、次のエラーが繰り返し発生します:

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

ユーザーのシェルを変更できない理由を理解しようとしています。

答え1

setuid root であることを確認したので/usr/bin/chsh(したがって、非特権ユーザーが自分のログインシェルを変更できるはずです)、この動作の最も可能性の高い説明は、次のいずれかです。

  • 現在のログインシェルが /etc/shells ファイルにありませんでした

または

  • 現在のログインシェルは制限されています(おそらく/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

ルートがユーザーのログイン シェルを無効なシェルに設定することには制限がなく (ここでのように)、そのように設定しても、無効なシェルが /etc/shells ファイルに追加されても有効にならないことに注意してください。

$ 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

ユーザーのログイン シェルは に保存され/etc/passwd、一般ユーザーによる変更から保護されています。 で確認できますgetent passwd $USER
新しいシェルが にリストされている場合は/etc/shells、次のように変更できます。

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

Ctrl-Alt-F3ログイン情報のすべての操作と同様に、何かを壊してログインできない場合に備えて、別の端末 ( ) でログイン セッションを必ず用意しておいてください。

関連情報