Linuxのchageコマンド入門:パスワード有効期限とアカウント失効ポリシー設定

概要

Linux環境のセキュリティ強化において、パスワードの有効期間や不要アカウントの自動失効といったエージング管理は基礎にして不可欠な要素です。本稿ではLinux標準のchageコマンドを取り上げ、検証用ユーザーを用いた設定状況の参照からローテーション期間の指定、初回サインイン時の強制変更処理まで、一連の実務手順を分かりやすく解説します。

1. 検証用ユーザーの作成と現状設定の参照 (chage -l)

既存システムの設定を乱すことなく安全に挙動を把握できるよう、まずはテスト用のユーザーtestuserが存在しない場合に新規作成します。

sudo id -u testuser &>/dev/null || sudo useradd -m testuser

作成完了後、chpasswdコマンドを利用して作業用の初期認証パスワードを流し込みます。

echo ’testuser:Password123!’ | sudo chpasswd

chage(Change Age)コマンドは、ログインユーザーのパスワード満了サイクルやアカウント自体の有効期限を細かく規定・監査するための管理ツールです。
-lオプションを実行することで、対象ユーザーに割り当てられている現在のエージングパラメーターを一覧確認できます。

⚙️ [主な利用オプション一覧]

-l : 指定ユーザーのパスワード満了情報および有効期限設定を表示します。
-m : パスワード更新後に次の変更が可能となるまでの最短インターバル(日数)を定めます。
-M : パスワードの最長有効日数(強制変更までの期限)を定めます。
-W : 有効期限が切れる前にユーザーへ事前警告を発出する日数(通知期間)を定めます。
-I : パスワード失効後、アカウントが完全にロックされるまでの猶予日数(非アクティブ猶予)を定めます。
-E : アカウント自体の使用停止(利用不能)となる失効年月日を直接指定します。
-d : 最終パスワード変更日を手動で再設定します。

sudo chage -l testuser

2. パスワードの最短・最長更新周期と事前警告日数の構成 (-m, -M, -W)

パスワードの即時変更による履歴回避を防ぐ最短期間を7日(-m 7)、定期更新を義務付ける最長期限を90日(-M 90)、そして期限切れ前の注意喚起アナウンスを14日前(-W 14)から開始するようchageで定義します。
このパラメータ構成により、パスワードの意図的な即時上書きをブロックしつつ、定期的なパスワードローテーション運用を自動化できます。

sudo chage -m 7 -M 90 -W 14 testuser

設定の適用後は、改めて-lオプションを実行して各ポリシー値が意図通り反映されたかを検証します。
コマンドの出力結果から、変更禁止日数(7日)、最大有効日数(90日)、事前警告日数(14日)に連動して、次回満了予定日(Password expires)が自動再計算されて反映されていることが確認できます。

sudo chage -l testuser

3. アカウント自体の失効期日および無効化猶予期間の登録 (-E, -I)

プロジェクトメンバーや外部委託向けなど、期間限定のアカウント運用を想定し、失効日を2026年12月31日(-E 2026-12-31)に固定します。あわせて、パスワード期限切れ後も7日間放置された場合にログインを遮断する非アクティブ猶予(-I 7)を付与します。
これにより契約終了に伴うアカウント放置リスクを未然に防ぎ、放置された期限切れ資格情報を安全にロックアウトできます。

sudo chage -E 2026-12-31 -I 7 testuser

再度-lを実行し、エージングポリシーの適用状態を再照会します。
表示されたステータス項目において、アカウント全体の満了期日(Account expires : Dec 31, 2026)と、失効後のアカウント無効化日時(Password inactive : Jan 21, 2027)が正しく計算され、スケジュール通りにセットされていることが把握できます。

sudo chage -l testuser

4. 初回ログイン時のパスワード強制更新とテスト環境の片付け (-d 0)

新規払い出し時など、管理者が設定した初期パスワードをユーザー自身ですぐに変更させたい場合は、最終変更日をエポック日時(0日)にリセットする-d 0オプションを活用します。
このフラグを適用することで、次回ログイン時に新しいパスワードへの更新を行わない限りシェルへのアクセスが許可されなくなり、初期認証情報の漏洩リスクを最小化できます。

sudo chage -d 0 testuser

-lオプションを実行して適用フラグの状態を検証します。
最終変更日(Last password change)および有効期限(Password expires)の双方がpassword must be changedという表示に切り替わり、次回アクセス時の強制変更トリガーが正しく作動する状態になっていることが分かります。

sudo chage -l testuser

動作確認が完了したら、システムを元のクリーンな状態へ戻すため、userdel -rを実行して今回作成したtestuserおよび専用ホームディレクトリごと完全に除去します。

sudo userdel -r testuser

本稿では、Linux環境におけるchageコマンドの実践的なパラメーター指定とアカウントのエージング管理手法を体系的に整理しました。
適切なパスワード有効期限やアカウント失効ルールを運用に組み込み、サーバーのセキュリティレベル向上にお役立てください。