Linuxのアカウントロック確認と解除|passwd -S・chage・faillockの違い

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など、失敗する認証経路とエラー全文
  • 変更日時と直前の更新、運用上の無効化の理由
  • 認証ログに記録された対象ユーザー・失敗理由。ハッシュやパスワードは共有しない

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次