chshコマンドでログインシェルを変更する方法|/etc/shellsの確認とusermodとの違いもコマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドA-E, ユーザ・グループ管理コマンド > chshコマンドでログインシェルを変更する方法|/etc/shellsの確認とusermodとの違いもコマンド
「ログインシェルをbashからzshに変えたい」
「chshコマンドでシェルを変更しようとしたが、エラーが出て変更できない」
Linuxのログインシェルは、ユーザーがSSHやコンソールでログインした際に自動的に起動するシェルです。好みのシェルに変更したい場合や、サービス用アカウントのシェルを /sbin/nologin に設定してSSHログインを禁止したい場合に使うのが chsh(change shell)コマンドです。

この記事では、chsh コマンド の実践的な使い方を解説します。
-s オプションでのシェル変更、/etc/shells への登録確認、usermod との使い分け、トラブル時のエラー対処まで網羅しました。
【この記事でわかること】
・chsh -s シェルのパス で自分のログインシェルを変更できる
・指定するシェルは /etc/shells に登録されている必要がある(未登録はエラー)
・一般ユーザーは自分のシェルのみ変更可能。他ユーザーの変更には root 権限が必要
・変更はログアウト・再ログイン後に有効になる(現在のセッションはすぐに変わらない)
・サービス用アカウントのシェル変更は usermod -s /sbin/nologin を使うのが現場の標準

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜログインシェルを変更するのか?

ログインシェルはユーザーの操作環境の根幹です。変更が必要になる場面は主に2つあります。

1. 開発者・管理者の好み:補完機能が強力な zsh や fish など、bash より使いやすいシェルに変えたい場合です。

2. セキュリティ上の理由:Webサーバーや DBサーバーを動かすためのサービス用アカウント(nginx・apache・mysql等)は、ログインシェルを /sbin/nologin に設定しておくことでSSHログインを禁止できます。万が一アカウントが侵害されても、インタラクティブなシェルを奪われるリスクを下げる重要なセキュリティ対策です。

chsh コマンドは /etc/passwd の7番目フィールド(ログインシェルのパス)を変更します。変更先のシェルは必ず /etc/shells に登録されている必要があります。

基本的な使い方

1. 現在のログインシェルを確認する

まず、現在のログインシェルを確認します。/etc/passwd の7番目フィールドがログインシェルです。

# 自分のログインシェルを確認する $ grep $USER /etc/passwd tomohiro:x:1001:1001::/home/tomohiro:/bin/bash # ↑ これがログインシェル # 利用可能なシェルの一覧を確認する $ cat /etc/shells /bin/sh /bin/bash /usr/bin/bash /bin/zsh /bin/tcsh

2. ログインシェルを変更する(-s)

# bash から zsh に変更する $ chsh -s /bin/zsh Changing shell for tomohiro. Password: ← 自分のパスワードを入力 Shell changed. # 変更後に確認する $ grep $USER /etc/passwd tomohiro:x:1001:1001::/home/tomohiro:/bin/zsh

変更はログアウト・再ログイン後に有効になります。現在のセッションのシェルはすぐには変わりません。

3. rootで他のユーザーのシェルを変更する

一般ユーザーは自分のログインシェルしか変更できませんが、root は他のユーザーのシェルも変更できます。

# root で pakira のログインシェルを変更する # chsh -s /bin/tcsh pakira Changing shell for pakira. Shell changed. # 確認する # grep pakira /etc/passwd pakira:x:500:500::/home/pakira:/bin/tcsh

応用・実務Tips

usermodでサービス用アカウントのシェルを変更する

サーバー管理の現場では、chsh よりも usermod -s を使う場面が多いです。特にサービス用アカウントのシェルを /sbin/nologin に変更する操作は usermod が標準的です。/sbin/nologin/etc/shells に登録されていないことが多いため、chsh だとエラーになるケースがあります。

# サービス用アカウントのシェルを nologin に変更する # sudo usermod -s /sbin/nologin nginx # 確認する # grep nginx /etc/passwd nginx:x:998:996:Nginx web server:/var/lib/nginx:/sbin/nologin

/etc/shellsに新しいシェルを登録する

自分でビルドしたシェルや、パッケージマネージャーで追加したシェルを chsh で指定するには、/etc/shells への追記が必要です(root 権限が必要)。

# fish シェルをインストールする # sudo dnf install fish # または apt install fish # インストール後に /etc/shells に自動追加されているか確認する $ cat /etc/shells # 追加されていない場合は手動で追記する # echo "/usr/bin/fish" >> /etc/shells

トラブルシュート・エラー対処

「chsh: /bin/zsh: non-standard shell」が出るとき

指定したシェルが /etc/shells に登録されていない場合に発生します。cat /etc/shells で登録済みのシェルを確認し、登録されていない場合は root で /etc/shells に追記してください。

$ chsh -s /usr/local/bin/zsh chsh: /usr/local/bin/zsh: non-standard shell # /etc/shells に追記する(root権限が必要) # echo "/usr/local/bin/zsh" >> /etc/shells # 再度実行する $ chsh -s /usr/local/bin/zsh

変更後もログインシェルが変わっていないとき

chsh を実行してもログインシェルが変わっていない場合は、まだ再ログインしていない可能性があります。現在のセッションは exec bash / exec zsh で切り替えられますが、正式にはログアウト・再ログインが必要です。

# 変更が反映されているか確認する $ grep $USER /etc/passwd # 現在のセッションだけ強制的に切り替える(再ログインの代替) $ exec /bin/zsh

本記事のまとめ

やりたいこと コマンド
現在のログインシェルを確認する grep $USER /etc/passwd
自分のログインシェルを変更する chsh -s /bin/zsh
他のユーザーのシェルを変更する(root) chsh -s /bin/zsh ユーザー名
利用可能なシェル一覧を確認する cat /etc/shells
サービス用アカウントのシェルを変更する sudo usermod -s /sbin/nologin ユーザー名
/etc/shells にシェルを追加する(root) echo "/usr/bin/fish" >> /etc/shells

ログインシェルを自在に変更・管理できていますか?

コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。