こんにちは、OSSよろず相談室のSKです。
OSS に関するお問い合わせが日々寄せられる中で、今回は Linux における pam_faillock によるアカウント一時ロック に関連して寄せられたお問い合わせをご紹介します。
以下のような問い合わせがありました。
Red Hat Server 環境にて、一時的にログインができなくなる事象が発生しました。
一般ユーザがリモートからログインしたところ、認証エラーとなりログインできませんでした。
管理者(root)ユーザに切り替えて passwd -S コマンドで確認したところ PS(パスワード設定済み・有効)と表示されており、アカウントロック(LK)にはなっていません。
また、特に解除操作を行わなくても一定時間経過すると正常にログインできるようになります。何が原因なのでしょうか?
passwd -S コマンドは /etc/shadow ファイルを参照しますが、pam_faillock による一時ロック情報は /etc/shadow ではなく専用のディレクトリ(/var/run/faillock/)で管理されているため、passwd -S では確認できません。
今回は、このやり取りに関連して、「pam_faillock とは何か」「passwd -S で確認できない理由」「faillock コマンドでの確認方法」「Linux(Red Hat系)での動作検証手順」について解説します。
pam_faillock とは?
pam_faillock は、Linuxの認証システム(PAM)で提供されているセキュリティモジュールです。
短時間に指定された回数以上の認証失敗(パスワード間違いなど)が発生した際に、ブルートフォース攻撃(総当たり攻撃)などの不正アクセスを防ぐ目的で、該当アカウントを一時的に自動ロックします。
なぜ passwd -S で確認できないのか?
passwd -S コマンドは /etc/shadow ファイルを参照してアカウントのステータス(PS: パスワード有効、LK: ロック等)を判定します。
passwd -S コマンド出力例
testuser PS 2026-09-01 0 99999 7 -1 (Password set, SHA512 crypt.)
一方、pam_faillock による一時ロック情報は /etc/shadow を書き換えるのではなく、専用のディレクトリ(デフォルト: /var/run/faillock/)に失敗履歴として記録・管理されます。
そのため、/etc/shadow 上は正常(PS)に見えても、pam_faillock の失敗カウンタが上限に達していることで認証が拒否される現象が発生します。
システムログと設定パラメータ
システムログ(/var/log/secure)の出力例
pam_faillock により一時ロックが発生すると、/var/log/secure に以下のようなログが出力されます。
Sep 01 13:32:06 server sshd:pam_unix(sshd:auth): authentication failure; ... user=<対象ユーザ名>
Sep 01 13:32:40 server sshd:pam_unix(sshd:auth): authentication failure; ... user=<対象ユーザ名>
Sep 01 13:36:01 server sshd:pam_unix(sshd:auth): authentication failure; ... user=<対象ユーザ名>
Sep 01 13:36:01 server sshd:pam_faillock(sshd:auth): Consecutive login failures for user <対象ユーザ名> account temporarily locked
設定パラメータ例(/etc/security/faillock.conf)
/etc/security/faillock.conf の代表的な設定項目は以下の通りです。
deny = 3
fail_interval = 900
unlock_time = 1800
deny = 3: 3回連続で認証失敗するとロックされます。fail_interval = 900: 15分間(900秒)の中で発生した失敗回数をカウントします。unlock_time = 1800: ロック発生後、30分間(1800秒)経過すると自動的にロックが解除されます。
注意点
- パスワード変更では解除されない:ロック中にパスワード変更を行っても
pam_faillockのロック状態は解除されません(passwdとpam_faillockの管理領域が独立しているため)。 - 失敗試行の繰り返しによる延長:ロック中にログイン試行を繰り返すと新たな失敗履歴が追加され、ロック期間(
unlock_time)がさらに延長されることがあります。
faillock コマンドによるロック状態の確認方法
pam_faillock による認証失敗履歴およびロック状態を確認するには、faillock コマンドを使用します。
faillock --user <対象ユーザ名>
実行結果の例:
When Type Source Valid
2026-09-01 15:25:51 TTY pts/1 V
2026-09-01 15:25:59 TTY pts/1 V
2026-09-01 15:26:06 TTY pts/1 V
Valid 列に V が表示されている試行が有効な失敗記録としてカウントされており、これが指定回数(deny の値)に達するとロック状態となります。
Linux での動作検証手順
実際に Linux(今回は Red Hat Enterprise Linux 8)環境で pam_faillock の動作を確認する手順例です。
1. テスト用ユーザの作成
# useradd testuser
# passwd testuser
2. SSSDの最小構成設定と起動
# cat << 'EOF' > /etc/sssd/sssd.conf
[sssd]
config_file_version = 2
services = nss, pam
domains = files
[domain/files]
id_provider = files
EOF
# chown root:root /etc/sssd/sssd.conf
# chmod 600 /etc/sssd/sssd.conf
# systemctl enable --now sssd
3. authselect による faillock の有効化
# authselect enable-feature with-faillock
# authselect apply-changes
# authselect current
4. faillock.conf の設定
# cp -p /etc/security/faillock.conf /etc/security/faillock.conf.org
# cat << 'EOF' >> /etc/security/faillock.conf
deny = 3
fail_interval = 900
unlock_time = 60
EOF
5. 意図的な認証失敗とロック確認
一般ユーザへ切り替えた上で、わざとパスワードを間違えてログインを試みます。
# su - testuser
# パスワードを3回以上間違える
その後、root ユーザで失敗履歴を確認します。
# faillock --user testuser
まとめ
Linux で「パスワード設定は正常(PS)なのにログインできない」場合は、pam_faillock による一時ロックを疑い、/var/log/secure や faillock --user <ユーザ名> コマンドで状態を確認することが有効です。
ご覧いただきありがとうございました!
参考ドキュメント
pam_faillock(8) — Linux manual page
https://man7.org/linux/man-pages/man8/pam_faillock.8.html
faillock(8) — Linux manual page
https://man7.org/linux/man-pages/man8/faillock.8.html

