こんな状況に直面したとき、真っ先に疑うべき原因の一つが PAMのfaillock(フェイルロック)によるアカウントロックです。RHEL 8以降のディストリビューションでは、一定回数のパスワード失敗でアカウントが自動的にロックされる仕組みが標準で有効になっています。
この記事では、linux ログインできない faillockというトラブルに対して、アカウントロックの状態確認・解除・PAM設定の読み方まで、障害対応フローとして体系的に解説します。RHEL 9.4 / Rocky Linux 9.4で動作確認済みです。
この記事のポイント
・faillock コマンドでアカウントロック状態を即確認できる
・faillock --reset --user ユーザー名 でロックを即時解除できる
・ロック条件は /etc/security/faillock.conf で一元管理されている
・SSH鍵認証や sudo が使える場合は別経路で緊急対処できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Linuxにログインできない主な原因
「linux ログインできない」という状況には、複数の原因が考えられます。闇雲に作業を始める前に、まず原因を絞り込みましょう。
ログイン失敗の主な原因は次のとおりです。
・faillockによるアカウントロック:一定回数パスワードを誤るとアカウントがロックされる(本記事のメインテーマ)・パスワードの有効期限切れ:chage コマンドで設定したパスワード有効期限が切れている
・ホームディレクトリの権限異常:~/.ssh や ~/.bash_profile のパーミッションが不正
・SSHサービスの停止・設定ミス:sshd が起動していない、またはポート設定が変更された
・SELinuxのポリシー違反:SELinuxが有効な環境でログインをブロックしている
・PAM設定の破損:/etc/pam.d/ 配下の設定ファイルに誤りがある
これらのうち、現場でもっとも頻繁に遭遇するのが faillockによるアカウントロックです。理由は単純で、ブルートフォース攻撃の自動検知を目的として、RHEL 8以降では pam_faillock.so がデフォルトで有効になっているからです。
faillockとは何か・PAMとの関係
faillock は、LinuxのPAM(Pluggable Authentication Modules:差し替え可能な認証モジュール)フレームワークの一部として機能するツールです。
PAMは「認証処理を差し替え可能なモジュール構成にする」仕組みで、ログイン時の実際の認証処理はPAMを経由して行われます。その認証フローの中に pam_faillock.so モジュールが組み込まれており、パスワード失敗の回数をカウントし、閾値を超えたアカウントをロックする役割を担います。
ロック情報は /var/run/faillock/ ディレクトリ配下に、ユーザー名をファイル名としたバイナリファイルで保存されます。
# faillock が管理するロック情報の保存場所 ls -la /var/run/faillock/ # 実際の出力例: # -rw------- 1 root root 112 Jul 18 03:21 taro # -rw------- 1 root root 96 Jul 18 03:15 hanako # 各ファイルが1ユーザーのロック情報に対応
RHEL 9(および Rocky Linux 9)では、authselect コマンドで認証プロファイルを管理します。authselect current を実行すると、現在のプロファイルと有効なオプションを確認できます。
アカウントロックの状態を確認する(faillockコマンドの使い方)
ログインできない障害が発生したら、まず faillock コマンドでロック状態を確認します。
1. 特定ユーザーのロック状態を確認する
# 特定ユーザーのロック状態を確認(root で実行) faillock --user taro
実際のサーバーでの出力例(ロックされているケース)は次のようになります。
taro: When Type Source Valid 2026-07-18 03:15:42 RHOST 192.168.10.XXX V 2026-07-18 03:15:47 RHOST 192.168.10.XXX V 2026-07-18 03:15:52 RHOST 192.168.10.XXX V
「Valid」列に V が並んでいる場合、そのログイン失敗が現在も有効でロックに貢献している状態です。一方、ロックが解除済みか時間経過で無効になったものは「V」の代わりに空白になります。
2. すべてのユーザーのロック状態を一覧表示する
# ロック情報があるすべてのユーザーを表示 ls /var/run/faillock/ | while read u; do echo "=== $u ==="; faillock --user "$u" done
このようにシェルスクリプト的に組み合わせることで、複数ユーザーのロック状態をまとめて把握できます。サーバーに多数のユーザーが存在する環境では特に便利です。
ロックを解除する手順(faillock --reset)
アカウントロックが確認できたら、次のコマンドで即時解除できます。
1. 特定ユーザーのロックを解除する
# root 権限で実行 faillock --user taro --reset
このコマンドは /var/run/faillock/taro ファイル内の失敗カウントをリセットします。コマンド実行後、即座にパスワードでのログインが可能になります。再度 faillock --user taro を実行して、Valid列が空になっていることで解除を確認しましょう。
2. 解除後の確認
# リセット後に再確認(出力が空 or V なし = 解除済み) faillock --user taro # 解除済みの状態の出力例: # taro: # When Type Source Valid
「Valid」列に何も表示されない、または行自体がなければ解除完了です。
注意点として、faillock --reset はロックを即時解除するだけで、パスワード自体を変更するものではありません。解除後に本人が正しいパスワードでログインできることを確認してください。パスワード自体を忘れているようであれば、別途 passwd コマンドでリセットが必要です。
PAM設定ファイルの確認方法(/etc/security/faillock.conf・pam_faillock.so)
faillockの動作は、PAM設定ファイルによって制御されています。RHEL 9系では主に2箇所を確認します。
1. /etc/security/faillock.conf(メインの設定ファイル)
cat /etc/security/faillock.conf
主要なディレクティブは次のとおりです。
・deny:ロックするまでの失敗回数(デフォルト: 3)・fail_interval:失敗カウントを蓄積する時間窓(秒単位、デフォルト: 900秒=15分)
・unlock_time:ロック後の自動解除までの秒数(デフォルト: 600秒=10分)
・even_deny_root:rootアカウントもロック対象にするか(指定なしの場合はrootは除外)
・silent:ロック発生時にエラーメッセージを表示しない
2. /etc/pam.d/system-auth・password-auth(PAMスタック設定)
RHEL 9でauthselectを使っている場合、実際の設定は /etc/authselect/ 配下に生成されます。
# 現在の authselect プロファイルを確認 authselect current # 例: profile: sssd # Enabled features: with-faillock # PAMスタックのfaillock設定行を確認 grep faillock /etc/pam.d/system-auth grep faillock /etc/pam.d/password-auth
pam_faillock.so は通常、認証フローの auth フェーズに2行挿入されます。1行目(preauth)がログイン試行前に現在のロック状態をチェックし、2行目(authfail)がパスワード失敗時にカウンターを増加させます。
PAM設定ファイルを直接編集する場合は十分に注意してください。構文ミスがあるとすべてのユーザーがログインできなくなる可能性があります。RHEL 9系では、直接編集するより authselect コマンドを使うことが推奨されています。
viでPAM設定ファイルを開こうとしたとき「readonly」と表示されて編集できない場合は、vi/vim 読み取り専用解除の方法を参照してください。
ロック閾値・ロック時間を変更する方法
デフォルト設定(3回失敗で10分ロック)を変更したい場合は、/etc/security/faillock.conf を編集します。
1. 設定変更の手順
# バックアップを取ってから編集する(運用上の鉄則) cp /etc/security/faillock.conf /etc/security/faillock.conf.bak vi /etc/security/faillock.conf
変更例(5回失敗で30分ロックにする場合):
# 変更前(デフォルト設定はコメントアウトされていることが多い) # deny = 3 # fail_interval = 900 # unlock_time = 600 # 変更後(コメントを外して値を設定) deny = 5 fail_interval = 900 unlock_time = 1800
2. 設定変更後の確認
faillock.conf の変更は PAM を再起動しなくても即座に反映されます(設定ファイルは認証のたびに読み込まれるため)。変更後、意図した閾値でロックが発生するかテスト環境で確認しておきましょう。
rootアカウントのロックについて:デフォルトでは root アカウントは faillock のロック対象外です。これを有効にするには even_deny_root をコメントアウトから外します。ただし、rootのロックを有効にすると、攻撃者に意図的にrootをロックされるリスクがあります。コンソールアクセスができない環境では特に慎重に検討してください。
ログイン失敗ログの確認(/var/log/secure, journalctl)
誰がいつログインに失敗したかを調査するには、システムログを確認します。
1. /var/log/secure でSSHログイン失敗を確認する
# 直近のSSHログイン失敗を確認 grep "Failed password" /var/log/secure | tail -20 # 特定ユーザーの失敗ログを絞り込む grep "Failed password for taro" /var/log/secure # 実際のサーバーでの出力例: # Jul 18 03:15:42 sv01 sshd[12345]: Failed password for taro from 192.168.10.XXX port 52411 ssh2 # Jul 18 03:15:47 sv01 sshd[12346]: Failed password for taro from 192.168.10.XXX port 52412 ssh2
2. journalctl でsshd のログを確認する
RHEL 9系ではjournaldが主体となっているため、journalctl でもログを確認できます。
# sshdのログをリアルタイムで確認 journalctl -u sshd -f # 過去1時間のsshd ログを確認 journalctl -u sshd --since "1 hour ago" # PAMのアカウントロックに関するメッセージを確認 journalctl | grep "pam_faillock"
3. ログイン成功・失敗の統計を確認する
# 最近のログイン履歴(lastコマンド) last -n 20 # ログイン失敗履歴(lastbコマンド) lastb -n 20
lastb コマンドは /var/log/btmp を参照します。大量のブルートフォース攻撃を受けている実務環境では、ここに膨大な記録が残ることがあります。
sudo/SSH鍵認証が使えるときの緊急対処
アカウントがロックされていても、別の経路でサーバーにアクセスできれば対処できます。シナリオ別に対応方法をまとめます。
1. SSH鍵認証で別ユーザーがログインできる場合
管理者ユーザーでSSH鍵認証を使ってログインし、sudoで faillock --reset を実行します。
# 管理者ユーザーでログイン後、sudo でロック解除 sudo faillock --user taro --reset
なお、SSH経由でサーバーが応答しているかを確認するには、ssコマンドでポートのListen状態を確認する方法が有効です。詳しくはLinux ポート確認の全コマンド(ss・lsof・netstat)を参照してください。
2. rootでコンソールログインできる場合
物理コンソールやKVM越しにrootでログインできる場合は、直接 faillock --reset を実行できます。
3. 自分自身がロックされた場合
自分のアカウントがロックされた場合は、root または sudo 権限を持つ別アカウントからの解除が必要です。rootが唯一のアカウントでrootもロックされているという最悪のケースは、コンソール接続でrescueモードやシングルユーザーモードで起動して対処します。
よくあるトラブル・落とし穴と注意点
1. authselect を使わずに /etc/pam.d/ を直接編集してはいけない
RHEL 9系では authselect が PAM 設定を管理します。/etc/pam.d/system-auth や /etc/pam.d/password-auth を直接編集すると、次回 authselect を実行したときに上書きされます。authselect コマンドを通じて設定を変更するのが正しいアプローチです。
2. deny=0 はロック無効を意味する
faillock.conf で deny = 0 と設定すると、アカウントロックが無効化されます(失敗回数を無視する)。「0回でロック」という意味ではないため注意が必要です。
3. ロック解除後もパスワードが間違っていればまたロックされる
faillock --reset はロックカウンターをリセットするだけです。ユーザーが正しいパスワードを知らない場合は、passwd コマンドでパスワードをリセットしてから連絡する必要があります。
4. /var/run/faillock は再起動で消えることがある
/var/run/ はtmpfsでマウントされる場合があり、サーバー再起動でロック情報が消えることがあります。ただし、再起動してもログインできない場合はfaillock以外の原因を疑ってください。
5. 攻撃者による意図的なアカウントロック(DoS的攻撃)
外部からの攻撃者が意図的に特定ユーザーのパスワードを大量に試行してアカウントをロックさせるケースがあります。fail2ban などのIP制限ツールと組み合わせた多層防御が運用上の鉄則です。
まとめ
linux ログインできない 状況でfaillockが原因だった場合のフローをまとめます。
| やりたいこと | コマンド |
|---|---|
| ロック状態を確認する | faillock --user ユーザー名 |
| ロックを即時解除する | faillock --user ユーザー名 --reset |
| 全ユーザーのロック情報を確認 | ls /var/run/faillock/ |
| ロック閾値を変更する | vi /etc/security/faillock.conf |
| ログイン失敗ログを確認する | grep "Failed password" /var/log/secure |
| sshdのログをリアルタイム確認 | journalctl -u sshd -f |
| 現在のauthselectプロファイル確認 | authselect current |
| ログイン失敗履歴を確認 | lastb -n 20 |
faillockは不正アクセスを防ぐ重要なセキュリティ機能ですが、正規ユーザーのログインを妨げる原因にもなります。障害対応の際は「linux ログインできない faillock」の組み合わせを真っ先に疑い、まず faillock --user コマンドでロック状態を確認する習慣を身につけておきましょう。
リナックスマスター.JP セミナーを見る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

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