こうした場面で登場するのがchage(change age)コマンドです。passwdコマンドでは扱いきれない、パスワードの有効期限・非活動日数・アカウント失効日といった時間軸の管理をすべて担います。
この記事では、chageコマンドの基本的な使い方から、監査対応・PCI-DSS準拠を意識した有効期限ポリシーの設計、退職者対応のベストプラクティスまで、現場で役立つ知識を体系的に解説します。
動作確認環境:RHEL 9.4 / Rocky Linux 9.4 / Ubuntu 24.04 LTS
この記事のポイント
・chage -l ユーザー名 で現在の有効期限設定を一覧表示できる
・chage -M 日数 で最大有効期限、-m で最短変更間隔を設定する
・chage -E YYYY-MM-DD でアカウント失効日を指定し退職者対応が可能
・設定は /etc/shadow の第3~第8フィールドに保存される
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
chageコマンドとは?passwdとの役割分担
chageコマンドは、ユーザーアカウントのパスワード有効期限ポリシーを管理するコマンドです。「change age」の略で、読み方は「チェイジ」です。passwdコマンドと役割が重なる部分もあるため、初学者は混乱しがちですが、おおまかには次のように棲み分けられています。
・passwd:パスワードそのものの変更・ロック/アンロック
・chage:パスワードの有効期限・変更間隔・アカウント失効日といった「時間軸」の制御
/etc/shadowファイルの第3~第8フィールドを書き換える専用ツール、と考えると理解が早いです。
現在の設定を確認する(-l オプション)
何はなくとも、まずは現状確認です。-l(list)オプションで対象ユーザーのパスワード有効期限情報を一覧表示します。# chage -l tanaka 最終パスワード変更日 : 4月 10, 2026 パスワード期限: : 7月 09, 2026 パスワード無効化中 : 7月 19, 2026 アカウント期限切れ : 12月 31, 2026 パスワードを変更できる最短日数 : 0 パスワードを変更しなくてはならない最長日数 : 90 パスワード期限が切れる前に警告される日数 : 7
・最終パスワード変更日:最後にパスワードが変更された日付
・パスワード期限:次にパスワード変更が必要になる日付
・パスワード無効化中:期限切れ後、アカウントが無効化される日付
・アカウント期限切れ:アカウントそのものが失効する日付
・最短日数:一度変更した後、再変更できるまでの日数
・最長日数:パスワードを変更せずに使い続けられる日数
・警告日数:期限前にログイン時に警告が表示される日数
自分自身のアカウントであれば
chage -l $USER でroot権限なしに確認できます。これは一般ユーザーにも開放されている便利な仕様です。パスワード有効期限ポリシーを設定する
ここからは実際にポリシーを変更していきます。対話形式と非対話形式の両方を押さえておきましょう。1. 対話モードで一括設定する
引数なしで実行すると、対話形式で全項目を順に入力できます。# chage tanaka tanaka のエージング情報を変更中 必要に応じて値を入力してください。デフォルト値を使う場合はリターンを入力。 (現在の値を変更しない場合、空白にすること): 最短日数 [0]: 1 最長日数 [99999]: 90 最終パスワード変更日 (YYYY-MM-DD) [2026-04-10]: 警告日数 [7]: アカウント期限切れ (YYYY-MM-DD) [never]:
2. 最長有効期限を設定する(-M オプション)
スクリプトで一括設定するなら非対話モードが必須です。最長日数だけ設定するなら-M(Maximum)を使います。# chage -M 90 tanaka # chage -l tanaka | grep 最長 パスワードを変更しなくてはならない最長日数 : 90
3. 最短変更間隔を設定する(-m オプション)
-m(minimum)は「一度変更したら最低何日は次の変更を待つか」の設定です。連続変更で履歴をすり抜けるのを防ぐ用途で使います。# chage -m 1 tanaka
4. 警告日数を設定する(-W オプション)
-W(Warning)は、期限が近づくとログイン時に警告メッセージを出す日数です。# chage -W 14 tanaka
5. 非活動期間を設定する(-I オプション)
-I(Inactive)は「パスワード期限切れ後、さらに何日経過したらアカウントを無効化するか」を指定します。# chage -I 10 tanaka
アカウント失効日を設定する(-E オプション)
-E(Expire date)は、このコマンドの中でも特に実務頻度が高いオプションです。アカウントそのものが使えなくなる日付を指定します。# chage -E 2026-12-31 tanaka # chage -l tanaka | grep アカウント アカウント期限切れ : 12月 31, 2026
失効日を解除する場合は -1 を指定します。
# chage -E -1 tanaka
パスワードを強制的に変更させる(-d 0)
「新規ユーザー作成時、初回ログイン時にパスワードを変更させたい」という要件は頻出です。-d 0(最終変更日を1970-01-01扱いにする)で実現できます。# useradd -m newuser # passwd newuser (初期パスワードを設定) # chage -d 0 newuser # chage -l newuser 最終パスワード変更日 : パスワード変更が必要
応用・実務Tips
現場で効くノウハウをいくつか紹介します。全ユーザーの有効期限を一括確認する
監査で「全ユーザーのパスワード期限をリストで出して」と言われたときに便利なワンライナーです。# awk -F: '$3 >= 1000 && $7 !~ /nologin|false/ {print $1}' /etc/passwd | \ while read u; do echo "=== $u ===" chage -l "$u" | grep -E '最終|最長|アカウント' done
/etc/login.defsでデフォルト値を変える
useraddで新規ユーザーを作成するとき、個別にchageを叩かなくても自動で適切なポリシーが適用されるようにしておくのが運用の基本です。/etc/login.defs で制御します。# grep -E '^PASS_' /etc/login.defs PASS_MAX_DAYS 90 PASS_MIN_DAYS 1 PASS_WARN_AGE 14
/etc/shadowとの関係
chageが書き換えているのは、/etc/shadow の第3~第8フィールド(コロン区切り)です。# grep tanaka /etc/shadow tanaka:$6$Xk...省略...:20188:1:90:14:10:20453:
手動で編集するのはミスの元なので、必ず
chage経由で変更してください。「chage: ユーザー 'xxx' の情報を変更できません」が出た時の対処法
chage実行時によくあるエラーと原因を整理します。原因1:root権限でない
chageで他ユーザーの設定を変更するにはroot権限が必要です。sudoまたはroot昇格してから実行してください。自分自身の確認(
-lのみ)は一般ユーザーでも可能です。原因2:SELinuxによるブロック
# ausearch -m avc -ts recent | grep chage
setsebool または audit2allow で対処します。ただ、通常のRHEL/Rocky Linux標準ポリシーではchageが弾かれるケースはほぼありません。原因3:NIS/LDAP連携環境
ユーザー情報がLDAPやIPAに統合されている場合、ローカルの
/etc/shadowを書き換えてもアカウント属性は更新されません。FreeIPAならipa user-mod、Active DirectoryならAD側での操作になります。getent passwd ユーザー名でローカル参照かディレクトリ参照かを確認してください。chageコマンドの主要オプションまとめ
| やりたいこと | コマンド |
|---|---|
| 有効期限情報を確認する | chage -l tanaka |
| パスワード最長日数を90日にする | chage -M 90 tanaka |
| パスワード最短日数を1日にする | chage -m 1 tanaka |
| 期限切れ警告を14日前から出す | chage -W 14 tanaka |
| 期限切れ後10日で無効化する | chage -I 10 tanaka |
| アカウント失効日を指定する | chage -E 2026-12-31 tanaka |
| アカウント失効を解除する | chage -E -1 tanaka |
| 初回ログイン時にパスワード変更を強制する | chage -d 0 tanaka |
| 対話モードで一括設定する | chage tanaka |
本記事のまとめ
chageコマンドは、パスワードそのものを扱うLinux ポート確認の全コマンドのようなトラブル対応系とは別に、アカウントライフサイクル管理の中核を担うコマンドです。最低限押さえておきたいのは次の3点です。
・-l で現状確認、-M と -m で有効期限ポリシーを設定する
・-E で失効日を指定し、退職者・契約期間のあるユーザーに備える
・-d 0 で初回パスワード変更を強制し、初期パスワード使い回しを防ぐ
監査要件やセキュリティポリシーは年々厳しくなっており、手作業の棚卸しでは追いつきません。chageとuseradd、/etc/login.defsをセットで運用設計することで、大幅に工数を削減しながらコンプライアンスを守れます。
ユーザー管理の前提となる環境整備についてはLinux 基本コマンドの解説も合わせて確認しておくと、全体像がクリアになります。また、ログイン周りの足回りとしてシェル環境変数の理解も欠かせないので、csh 環境変数設定の解説も参考にしてください。
「監査のたびにアカウント棚卸しで消耗していませんか?」
chageは有効期限管理の強力なツールですが、本当に楽になるのは「属人化しない運用設計」とセットで使えたときです。ユーザーライフサイクル・認証・権限分離・監査ログまで、一つひとつ自分の手で確信を持って扱えるかが現場の分かれ目です。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます