【Linux】chshコマンドでログインシェルを切り替える

目次

概要

ユーザーがターミナルにログインした直後に起動するシェル(ログインシェル)を変更するためのコマンドです。

bashからzshへの切り替えや、システム管理用ユーザーのシェルを無効化する場合などに使用します。変更内容はユーザーデータベース(/etc/passwd)に直接反映され、次回のログイン時から有効になります。

仕様(引数・オプション)

構文

chsh [オプション] [ユーザー名]

主なオプション

オプション説明
-s [シェル]新しいログインシェルのフルパスを指定します。
-l / –list-shells/etc/shells に記載されている、システムで使用可能なシェルの一覧を表示します。

基本の使い方

オプションを指定せずに実行すると、対話モードでシェルを変更できます。現在の設定が表示され、新しいパスの入力を求められます。

BASH

# 現在の設定を確認
grep mori /etc/passwd

# 対話モードで変更(パスワードが求められます)
chsh

# 変更後の確認
finger mori

実行結果例

Changing shell for mori.
Password: 
New shell [/bin/bash]: /bin/zsh
Shell changed.

実践コマンド

管理者権限で特定ユーザーのシェルを変更する

システム管理者が、ユーザー mori のログインシェルを強制的に /bin/tcsh に変更するシナリオです。この場合、ユーザーのパスワードではなく管理者(root)権限で実行するため、相手のパスワードを知っている必要はありません。

BASH

# 管理者権限で mori のシェルを変更
sudo chsh -s /bin/tcsh mori

# 結果の確認
grep mori /etc/passwd

実行結果例

mori:x:1001:1001::/home/mori:/bin/tcsh

自分のシェルをコマンド一発で変更する

対話モードを使わず、引数で直接新しいシェルを指定します。ここでは開発環境に合わせて /bin/zsh に切り替えます。

BASH

# 自分のシェルを zsh に変更
chsh -s /bin/zsh

# 確認
grep mori /etc/passwd

利用可能なシェルの一覧を表示する

システムにインストールされており、安全なシェルとして登録されているパスの一覧を確認します。ここにないシェルを指定すると警告が出ることがあります。

BASH

# /etc/shells の内容を表示
chsh -l

実行結果例

/bin/sh
/bin/bash
/usr/bin/zsh
/usr/bin/git-shell
/bin/tcsh

カスタムポイント

  • nologinシェルの設定セキュリティ上の理由で、ユーザー mori にログインさせたくない場合、シェルを /sbin/nologin/bin/false に変更します。これにより、SSH接続やローカルログインを拒否できます。Bashsudo chsh -s /sbin/nologin mori

注意点

  1. フルパスでの指定シェルを指定する際は、単に zsh ではなく /bin/zsh/usr/bin/zsh のように絶対パスで記述する必要があります。パスが不明な場合は which zsh コマンドで確認してください。
  2. 即時反映ではない変更内容は /etc/passwd ファイルに書き込まれますが、現在開いているターミナルには反映されません。一度ログアウトし、再ログインしたタイミングで新しいシェルが起動します。

まとめ

chshコマンドは、ユーザーの作業環境の基盤となるシェル定義を変更するためのツールです。

usermodコマンドでも同様の変更は可能ですが、chshは一般ユーザーが自分の環境を変更できる点で異なります。変更前には必ず -l オプションで利用可能なパスを確認し、存在しないパスを指定してログイン不能にならないよう注意して操作してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次