passwd / chage 入門 - パスワードと有効期限を管理する
この記事で解決できること
passwdとchageの 役割の違い が分かる- パスワード変更・アカウントロック・状態確認を迷わず実行できる
- パスワードの 有効期限(パスワードエイジング) をポリシーどおりに設定できる
/etc/shadowを読んで 現状を即把握 できる
結論(実務の型)
- パスワードの値そのもの(変更・ロック・削除)→
passwd - 期限・経過日数のルール(最長/最短/警告/失効)→
chage - どちらも書き込み先は同じ
/etc/shadow。他人のアカウント操作は root(sudo)が必要
前提(対象環境)
- OS:Ubuntu / 一般的な Linux(shadow-utils)
- 他ユーザーの操作は
sudo前提 - ローカルアカウント(
/etc/shadow管理)が対象。LDAP / AD 連携環境は対象外
passwd と chage は何が違うのか?
結論:
passwdはパスワードの「値」を、chageはパスワードの「期限ルール」を操作する。対象はどちらも同じ/etc/shadowの別フィールド。
/etc/shadow の 1 行はコロン区切りの 9 フィールドで構成される。両コマンドが触る場所を分けて理解すると混乱しない。
alice:$6$xxxx...:19876:7:90:7:30:20089: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └ (8) アカウント失効日(1970-01-01からの日数) │ │ │ │ │ │ └ (7) 失効後の猶予日数(inactive) │ │ │ │ │ └ (6) 期限切れ警告日数(warn) │ │ │ │ └ (5) 最長有効日数(max) │ │ │ └ (4) 変更後の最短経過日数(min) │ │ └ (3) 最終パスワード変更日(1970-01-01からの日数) │ └ (2) ハッシュ化パスワード └ (1) ユーザー名
passwd→ 第 2 フィールド(ハッシュ)を書き換えるchage→ 第 3〜8 フィールド(経過日数・期限)を書き換える
日付フィールドは「1970-01-01 からの経過日数」で保存される。人が読む形式は chage -l が変換してくれる(後述)。
パスワードを変更するには?
結論: 自分のパスワードは
passwdだけで変更する。他人のパスワードはsudo passwd ユーザー名で root 権限が必要。
自分のパスワード
$ passwd
現在のパスワードを 1 回、新しいパスワードを 2 回入力する。入力中は画面に何も表示されない(仕様)。
他人のパスワード(管理者)
$ sudo passwd alice
現在のパスワードを聞かれず、新しいパスワードを 2 回入力するだけで設定できる。
新規ユーザーに初期パスワードを設定したら、次のログイン時に本人へ強制変更させるのが定石。passwd --expire alice(後述の chage -d 0 と同義)で実現する。
アカウントをロック・状態確認するには?
結論:
passwd -lでロック、passwd -uで解除、passwd -Sで状態を 1 行で確認する。ロックはハッシュ先頭に!を付けてパスワード認証を無効化する。
状態確認
$ sudo passwd -S alice
alice P 06/05/2026 0 99999 7 -1
2 列目の意味:
P:使用可能なパスワードありL:ロック中NP:パスワード未設定
ロックと解除
# パスワード認証を無効化(退職者・休眠アカウント等) $ sudo passwd -l alice # 解除 $ sudo passwd -u alice
passwd -l はパスワード認証を止めるだけ。SSH 鍵認証は止まらない。完全に締め出すにはアカウント失効(chage -E または usermod -L + シェル無効化)を併用する。
パスワードの有効期限はどう確認するのか?
結論:
chage -l ユーザー名で、最終変更日・次回失効日・各種ポリシーを人が読める形式で一覧表示する。
$ sudo chage -l alice
Last password change : Jun 05, 2026 Password expires : Sep 03, 2026 Password inactive : Oct 03, 2026 Account expires : never Minimum number of days between password change : 7 Maximum number of days between password change : 90 Number of days of warning before password expires : 7
- Password expires:このパスワードが使えなくなる日(最終変更日 + max)
- Password inactive:失効後さらに猶予が切れてアカウントが使えなくなる日(+ inactive)
- Account expires:アカウント自体が無効になる日(
-Eで設定)
パスワードの有効期限はどう設定するのか?
結論:
chage -Mで最長日数、-mで最短日数、-Wで警告日数、-Iで失効猶予を設定する。複数オプションは 1 コマンドにまとめられる。
主なオプション
| オプション | 意味 | 例 |
|---|---|---|
-M |
最長有効日数(これを超えると失効) | -M 90 |
-m |
変更後に再変更できるまでの最短日数 | -m 7 |
-W |
失効前の警告日数 | -W 7 |
-I |
失効後アカウント無効化までの猶予日数 | -I 30 |
-E |
アカウント失効日(YYYY-MM-DD) | -E 2026-12-31 |
-d |
最終変更日の上書き | -d 0 |
まとめて設定
$ sudo chage -M 90 -m 7 -W 7 -I 30 alice
「90 日で失効、変更後 7 日は再変更不可、7 日前から警告、失効後 30 日でアカウント無効」というポリシーになる。
次回ログイン時に強制変更させる
$ sudo chage -d 0 alice
最終変更日を「エポック当日」に戻すことで「すぐ期限切れ」扱いとなり、次回ログイン時にパスワード変更を強制できる。
対話形式で 1 項目ずつ設定したい場合は引数なしの sudo chage alice を実行する。現在値が [ ] 内に表示され、Enter で据え置きできる。
アカウントの失効日を設定するには?
結論:
chage -E 日付でアカウント自体の失効日を設定する。期限契約のユーザーや一時アカウントの自動無効化に使う。
# 2026-12-31 でアカウントを失効させる $ sudo chage -E 2026-12-31 alice # 失効を解除(無期限に戻す) $ sudo chage -E -1 alice
-E はパスワード失効(-M)とは独立している。契約満了で確実にログインを止めたい場合は -M(パスワード期限)ではなく -E(アカウント期限)を使う。
よくある事故と切り分け
結論: 「変更できない」「即ログインできなくなった」の多くは、min 日数・
-d 0・失効日設定の誤りが原因。chage -lで現状を必ず確認する。
すぐにパスワードを変えられない
You must wait longer to change your password
-m(最短日数)が効いている。管理者なら sudo passwd で即変更できる。
設定直後にログインできなくなった
chage -d 0 と -M/-I の組み合わせで「即失効 + 猶予 0」になっていないか確認する。
$ sudo chage -l alice
root のパスワードは期限管理しない
システムアカウントや root にエイジングを掛けると締め出し事故につながる。ポリシー適用は 対話ログインする一般ユーザーに限定 する。
やってはいけないこと
rootやサービスアカウントへ安易にエイジング適用chage -Eとpasswd -lを混同(前者はアカウント、後者はパスワード)- 設定後に
chage -lで確認せず放置