chageコマンドでパスワード有効期限を管理する方法|アカウント無効化や強制変更の設定も


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, Linuxコマンド > chageコマンドでパスワード有効期限を管理する方法|アカウント無効化や強制変更の設定も
「監査で『ユーザーのパスワード有効期限を90日に設定してください』と言われたが、どう設定すればいいのか分からない」「退職者のアカウントを物理削除せずに無効化したい」

こうした場面で登場するのが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フィールドに保存される


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

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

PCI-DSSでは90日以内が要件、ISMS(ISO27001)では組織ポリシーに依存しますが、90日または180日が一般的です。

3. 最短変更間隔を設定する(-m オプション)

-m(minimum)は「一度変更したら最低何日は次の変更を待つか」の設定です。連続変更で履歴をすり抜けるのを防ぐ用途で使います。

# chage -m 1 tanaka

0(当日中に何度でも変更可)のままだと、pam_unix の「過去N件は再利用禁止」を回避されるので、最低1日は入れておくのが鉄則です。

4. 警告日数を設定する(-W オプション)

-W(Warning)は、期限が近づくとログイン時に警告メッセージを出す日数です。

# chage -W 14 tanaka

デフォルトは7日が多いですが、業務の都合で変更猶予を長めに取りたい場合は14日程度に伸ばすとユーザー体験が向上します。

5. 非活動期間を設定する(-I オプション)

-I(Inactive)は「パスワード期限切れ後、さらに何日経過したらアカウントを無効化するか」を指定します。

# chage -I 10 tanaka

設定すると、期限切れ後10日間はパスワード変更を促されますが、それを超えるとログインそのものが拒否されます。長期休暇明けの復帰を考えると、-1(無効化しない)や30日程度が無難です。

アカウント失効日を設定する(-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 最終パスワード変更日 : パスワード変更が必要

次回ログイン時、本人にパスワード変更を強制できます。初期パスワードをSlackやメールで伝達するプロセスと組み合わせるのが定番です。

応用・実務Tips

現場で効くノウハウをいくつか紹介します。

全ユーザーの有効期限を一括確認する

監査で「全ユーザーのパスワード期限をリストで出して」と言われたときに便利なワンライナーです。

# awk -F: '$3 >= 1000 && $7 !~ /nologin|false/ {print $1}' /etc/passwd | \ while read u; do echo "=== $u ===" chage -l "$u" | grep -E '最終|最長|アカウント' done

UID 1000以上(一般ユーザー)かつログインシェルが有効なユーザーを抽出し、chage -l を順次実行します。CSV化してスプレッドシートに貼れば、そのまま監査資料になります。

/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

変更後に作成したユーザーから適用されます。既存ユーザーには影響しないため、別途chageで揃える必要がある点に注意してください。

/etc/shadowとの関係

chageが書き換えているのは、/etc/shadow の第3~第8フィールド(コロン区切り)です。

# grep tanaka /etc/shadow tanaka:$6$Xk...省略...:20188:1:90:14:10:20453:

左から、ユーザー名・ハッシュ化パスワード・最終変更日(1970/1/1からの日数)・最短日数・最長日数・警告日数・非活動日数・失効日(同)・予約、の並びです。

手動で編集するのはミスの元なので、必ずchage経由で変更してください。

「chage: ユーザー 'xxx' の情報を変更できません」が出た時の対処法

chage実行時によくあるエラーと原因を整理します。

原因1:root権限でない

chageで他ユーザーの設定を変更するにはroot権限が必要です。sudoまたはroot昇格してから実行してください。自分自身の確認(-lのみ)は一般ユーザーでも可能です。

原因2:SELinuxによるブロック

# ausearch -m avc -ts recent | grep chage

SELinuxのポリシー違反が記録されていれば、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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


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

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

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

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

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

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

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

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

宮崎 智広

この記事を書いた人

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

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

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