Linuxのアカウントロックを確認する時は、パスワードのロック、アカウント/パスワードの期限、認証失敗による一時ロックを分けます。まずpasswd -Sでパスワード状態、chage -lで期限を確認し、失敗回数制限を使う環境ではPAMの記録も確認します。
passwd -SのLはパスワードのロックです。Pでも、アカウント期限やPAMの失敗回数制限は別に確認します。
以下の「ユーザー名」は対象の実名に置き換えてください。例はshadow-utilsを使うローカルアカウントを中心とした説明です。LDAP/Active Directory/SSSDなどの外部認証は、その管理側の状態も確認します。コマンドの実装・対応オプションは対象ホストのmanで確認してください。
確認コマンドを選ぶ:4つの状態を区別
| 確認したいこと | コマンド | 結果の限界 |
|---|---|---|
| 対象ユーザーが名前解決できるか | getent passwd ユーザー名 | 存在が分かってもログイン許可は証明しない |
| パスワードがロックされているか | sudo passwd -S ユーザー名 | L/P/NPはパスワードの状態 |
| パスワード・アカウントの期限 | sudo chage -l ユーザー名 | shadowにない外部認証の状態は分からない |
| PAMの認証失敗による制限 | sudo faillock –user ユーザー名 | pam_faillockを使う構成の場合だけ対象 |
Linuxのユーザーアカウントを確認する
getent passwd ユーザー名
getentの公式manでは、/etc/nsswitch.confで設定されるNSSのデータベースを参照します。/etc/passwdだけを見る方法と範囲が異なります。結果が出てもパスワードが正しい、期限が有効、SSHが許可されるという意味ではありません。
passwd -S:L・P・NPの意味
sudo passwd -S ユーザー名| 2番目のフィールド | 意味 | 次の確認 |
|---|---|---|
| L | パスワードがロックされている | ロック理由と解除の権限を確認 |
| P | 利用可能なパスワードがある | ログイン不能なら期限やPAM/SSH設定を確認 |
| NP | パスワードがない | 認証ポリシーを確認。安全な状態とは判断しない |
passwdの公式manは、パスワードをロックしてもアカウントそのものを無効にするとは限らず、SSH鍵など別の認証でログインできる場合があると説明しています。Lだけで「すべてのログインが禁止」、Pだけで「アカウントが有効」と判断しません。
chage -l:期限切れとロックを切り分ける
sudo chage -l ユーザー名出力の「Password expires」「Password inactive」「Account expires」を区別します。パスワード期限切れは変更が必要な状態、非アクティブ期限はその後の利用制限、アカウント期限はアカウント自体の期限です。Neverという表示も、パスワードロックやPAM制限がないことの証明ではありません。
chageの公式manによると、出力はshadowファイルの情報だけで、LDAPなど外部認証による制限は表示しません。chage -lはpasswd -SのL/P判定を代用するコマンドではありません。
認証失敗の一時ロック:faillockを使う構成の場合
sudo faillock --user ユーザー名
faillockの公式manは、pam_faillockがユーザーごとの失敗記録を管理すると説明しています。失敗記録があることだけで現在ロック中と判断せず、構成されているdeny・解除時間・対象認証経路と照合します。
faillockが存在しない、PAMで使っていない、別の記録ディレクトリを使う環境では、この確認だけでは判断できません。外部認証のロック、SSHの接続制限、ログインシェルなど、実際の認証経路を管理者が確認します。
/etc/shadowの記号は何を表す?
shadowはパスワードのハッシュなどを含む保護されたファイルです。平文の現在のパスワードを読む用途ではありません。次は9フィールドの構造を説明する概念図で、実行コマンドではありません。実際のハッシュを記事やサポート相談へ貼り付けないでください。
ユーザー名:暗号化パスワード:最終変更日:最小変更間隔:最大変更間隔:警告期間:非アクティブ期間:アカウント有効期限:予約フィールドshadowの公式manでは、パスワード欄が!で始まる場合はパスワードロックを示し、後ろに以前の値を保存することがあります。!や*のような有効なcrypt結果でない値はUnixパスワード認証に使えませんが、別の認証を必ず禁止するとは限りません。空欄も認証アプリごとに扱いが異なります。
パスワード欄が!だけの形式例です。以前の有効なハッシュがこの欄に残っている例ではありません。
lockeduser:!:18295:0:99999:7:::ハッシュが入る位置を示す形式例です。山括弧部分は説明用のプレースホルダーで、有効なハッシュ文字列ではありません。
activeuser:<パスワードハッシュ>:18295:0:99999:7:::ハッシュらしい文字列があることだけで、現在の認証可否を判断しないでください。ハッシュの直接編集より、管理ツールで状態と期限を確認します。
解除方法を原因に合わせて選ぶ
退職者・サービス用など意図的にロックしたアカウントを、表示がLというだけで解除しません。対象と権限、ロック理由を確認した管理者が必要な範囲で変更し、解除後にその認証経路で確認します。
パスワードのロックを解除する
passwd -lでロックした以前の有効なパスワードを戻す場合の例です。アカウント期限やPAMの失敗記録は解除しません。
sudo passwd -u ユーザー名sudo passwd -S ユーザー名状態を再確認し、意図した認証でログインできるかを確認します。!だけで以前のハッシュがないなど、戻せるパスワードがない場合は、エラーを無視して空欄へ変更せず、管理者によるパスワード再設定を検討します。
PAMの失敗記録を解除する
pam_faillockが原因で、解除が承認されている場合だけ、対象ユーザーの記録をリセットします。全ユーザーの一括リセットとは区別します。
sudo faillock --user ユーザー名 --reset
この操作は失敗記録のクリアです。パスワードロックや外部ディレクトリのロックを解除しません。繰り返し発生する場合は、古い資格情報で動くジョブや接続元など、失敗の原因も確認します。
期限切れの場合
期限の変更は組織の運用ルールとアカウントの目的に合わせて行います。すべての期限を無期限へ変更するのではなく、Account expiresとPassword expiresのどちらが原因かを確認し、管理者が必要な設定だけを更新します。
現在のパスワードを確認できる?再設定との違い
状態確認コマンドから現在の平文パスワードは取得できません。忘れた場合は管理者の本人確認・運用手順に沿って再設定します。自分のパスワード変更は次のコマンドです。
passwd管理者が対象ユーザーのパスワードを再設定する例です。入力は対話で行い、パスワードをコマンド引数や履歴に記録しません。
sudo passwd ユーザー名新しいパスワードは対象システムのポリシーに従います。再設定後もPAMの一時ロックやアカウント期限は別に確認してください。
解除後もログインできない時に確認する内容
- ローカルユーザーか外部ディレクトリのユーザーか
- passwd -S、chage -l、PAMの失敗記録それぞれの状態
- SSH鍵/パスワード/GUIなど、失敗する認証経路とエラー全文
- 変更日時と直前の更新、運用上の無効化の理由
- 認証ログに記録された対象ユーザー・失敗理由。ハッシュやパスワードは共有しない

コメント