こうした認証回りのセキュリティ強化で真っ先に手をつけるべきはPAM(Pluggable Authentication Modules)だ。ところがPAMは設定ファイルの書き方が独特で、「どのファイルをどう変えれば意図した動作になるのか」が直感的につかみにくい。
この記事では、RHEL 9.4 / Ubuntu 24.04 LTSの実機をベースに、PAMの認証スタックの仕組みから、パスワードポリシー(pam_pwquality)・ログイン失敗ロック(pam_faillock)の設定、そして認証失敗が出たときのトラブルシュートまでを解説する。
この記事のポイント
・PAMは/etc/pam.d/配下のファイルで認証処理を「スタック」として定義する仕組み
・required/sufficient/optionalの制御フラグが認証フローの合否を決定する
・pam_pwqualityでパスワード強度ポリシーを設定し脆弱なパスワードを弾ける
・pam_faillockで連続失敗ロックを実装しブルートフォース攻撃を緩和できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
PAM(Pluggable Authentication Modules)とは何か|スタック型認証の仕組み
PAMは、Linuxの認証処理を「モジュール」として組み合わせられる仕組みだ。login、sshd、su、passwdといった各サービスが「どうやってユーザーを認証するか」を、/etc/pam.d/配下の設定ファイルで個別に定義できる。PAM登場以前、各アプリケーションが認証ロジックを独自に実装していた。パスワードポリシーを変えるだけでもログイン・FTP・SMTPなど複数のプログラムを修正する必要があった。PAMが間に入ることで、設定ファイルを変えるだけで全サービスの認証ポリシーを一括変更できる。
PAMには4つの「タイプ」がある。
・auth:身元確認(パスワード照合・生体認証など)
・account:アカウントの有効性確認(有効期限・アクセス時間帯制限)
・password:パスワードの変更処理(強度チェック含む)
・session:ログイン前後の環境設定(ホームディレクトリ作成など)
各サービスの設定ファイル(例: /etc/pam.d/sshd)には、これら4タイプの処理を順番に記述する。複数のモジュールを積み重ねた処理の流れを「スタック」と呼ぶ。
/etc/pam.d/ の構成と制御フラグ(required・sufficient・optional)の読み方
/etc/pam.d/ 配下にはサービス名ごとのファイルが並んでいる。ls /etc/pam.d/ chfn chsh crond login other passwd polkit-1 runuser runuser-l sshd su su-l sudo system-auth
# /etc/pam.d/sshd の冒頭(RHEL 9) %PAM-1.0 auth substack password-auth auth include postlogin account required pam_sepermit.so account required pam_nologin.so account include password-auth password include password-auth session optional pam_keyinit.so force revoke session include password-auth session include postlogin
1. 制御フラグの意味
制御フラグが「このステップが失敗したら次はどうするか」を決める。・required:失敗しても後続モジュールを実行し続ける。最終的に必ず認証失敗を返す(失敗を即時通知しないことでタイミング攻撃を防ぐ)
・requisite:失敗した時点で即座に認証失敗を返す。後続モジュールを実行しない
・sufficient:成功時は後続のrequiredが全てOKなら認証成功を返す。失敗時は次のモジュールへ
・optional:結果がスタック全体の合否に影響しない。必須でない処理(セッション開始ログなど)に使う
2. include と substack の違い
`include` は別ファイルのスタック行を取り込む。`substack` はサブスタック全体を単一モジュールとして扱い、サブスタック内のrequisite失敗が呼び出し元のフローに影響しない点が異なる。pam_pwqualityでパスワードポリシーを強化する方法
`pam_pwquality` はパスワード変更時に強度チェックを行うモジュールだ。RHEL 9・Ubuntu 24.04ともに標準で導入済み。1. インストールと確認
# RHEL 9 / Rocky Linux 9 rpm -q libpwquality libpwquality-1.4.4-8.el9.x86_64 # Ubuntu 24.04 dpkg -l libpam-pwquality ii libpam-pwquality:amd64 1.4.5-1build2 amd64 PAM module to perform password quality checking
2. /etc/security/pwquality.conf の設定
パスワードポリシーの本体は `/etc/security/pwquality.conf` で設定する。# /etc/security/pwquality.conf # 最小文字数(デフォルト: 8) minlen = 12 # 大文字・小文字・数字・記号のうち何種類以上必須か minclass = 3 # 連続する同じ文字の最大繰り返し数(0は無制限) maxrepeat = 2 # ユーザー名をパスワードに含めない(1: 有効) usercheck = 1 # 辞書チェック(1: 有効, 0: 無効) dictcheck = 1 # パスワード変更時のリトライ回数 retry = 3
3. pam_pwquality が password スタックに組み込まれているか確認する
RHEL 9 では `/etc/pam.d/system-auth` の password 行を確認する。grep pwquality /etc/pam.d/system-auth password requisite pam_pwquality.so try_first_pass local_users_only
grep pwquality /etc/pam.d/common-password password requisite pam_pwquality.so retry=3
4. 設定後の動作確認
# rootで弱いパスワードを設定しようとするとエラーになることを確認 passwd testuser Changing password for user testuser. New password: BAD PASSWORD: The password is shorter than 12 characters BAD PASSWORD: The password contains less than 3 character classes Retype new password:
pam_faillockでログイン失敗ロックを設定する方法
`pam_faillock` は一定回数のログイン失敗でアカウントを一時ロックするモジュールだ。ブルートフォース攻撃への有効な防御線になる。1. faillock.conf で閾値を設定する
# /etc/security/faillock.conf # 失敗許容回数(超えるとロック: デフォルト 3回) deny = 5 # ロック継続時間(秒: 600 = 10分) unlock_time = 600 # 失敗カウントのリセット時間(秒: この時間内の失敗を集計) fail_interval = 900 # rootアカウントもロック対象にする even_deny_root = true root_unlock_time = 60
2. RHEL 9 での組み込み確認(authselect)
RHEL 9 / Rocky Linux 9 では `authselect` が /etc/pam.d/ ファイルを管理する。直接 system-auth を書き換えず、authselectコマンド経由で設定する。# 現在のプロファイルと有効な機能を確認 authselect current Profile ID: sssd Enabled features: - with-faillock # with-faillock が有効でない場合は追加する authselect select sssd with-faillock --force
3. Ubuntu 24.04 での設定
Ubuntu 24.04 では `/etc/pam.d/common-auth` を直接編集する。# /etc/pam.d/common-auth への追記例 auth required pam_faillock.so preauth silent audit deny=5 unlock_time=600 auth [success=1 default=bad] pam_unix.so auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=600 auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=600
4. ロック状態の確認と手動解除
# testuser の失敗ログを確認 faillock --user testuser testuser: When Type Source Valid 2026-09-06 10:02:14 RHOST 10.0.0.5 V 2026-09-06 10:02:18 RHOST 10.0.0.5 V 2026-09-06 10:02:22 RHOST 10.0.0.5 V 2026-09-06 10:02:26 RHOST 10.0.0.5 V 2026-09-06 10:02:30 RHOST 10.0.0.5 V # ロックを手動解除する(正当な本人確認後に実行) faillock --user testuser --reset
pam_limitsでリソース制限をログイン時に適用する方法
PAMはパスワードや認証だけでなく、ログイン時のプロセス数・オープンファイル数の制限も担う。`pam_limits` モジュールが `/etc/security/limits.conf` の設定を読み込む。1. limits.conf の設定例
# /etc/security/limits.conf # ユーザー webapp がopenできるファイルディスクリプタ数 webapp soft nofile 65536 webapp hard nofile 131072 # 全ユーザーのプロセス数制限 * soft nproc 4096 * hard nproc 8192
# webappユーザーでログインして確認 su - webapp ulimit -n 65536
2. pam_limits が組み込まれているか確認する
grep pam_limits /etc/pam.d/system-auth session required pam_limits.so # Ubuntu 24.04 では common-session を確認 grep pam_limits /etc/pam.d/common-session session required pam_limits.so
PAM認証失敗のトラブルシュート|/var/log/secureとauth.logの読み方
PAMの設定ミスはサーバーへのログインが一切できなくなるという深刻な障害につながる。設定変更は必ず別のSSHセッションを開いたまま行い、ロールバック手段を確保すること。1. ログの確認場所
# RHEL 9: /var/log/secure を確認 tail -f /var/log/secure # 認証失敗は以下の形式で記録される Sep 6 10:15:23 sv01 sshd[12345]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.0.5 user=testuser Sep 6 10:15:25 sv01 sshd[12345]: pam_faillock(sshd:auth): Consecutive login failures for user testuser account temporarily locked
# Ubuntu 24.04: /var/log/auth.log を確認 tail -f /var/log/auth.log # または journalctl で ssh サービスのログを表示 journalctl -u ssh -f --since "1 hour ago"
2. よくある問題と対処法
モジュールファイルが存在しない場合/lib64/security/ にモジュールが存在するか確認する。
ls /lib64/security/pam_faillock.so /lib64/security/pam_faillock.so # Ubuntu 24.04 ではパスが異なる ls /lib/x86_64-linux-gnu/security/pam_faillock.so /lib/x86_64-linux-gnu/security/pam_faillock.so
authselectが管理するファイルを直接変更すると、次回 `authselect apply-changes` 時に上書きされる。必ずauthselectコマンド経由で設定すること。
# 直接編集してしまった場合、authselectで復元できる authselect apply-changes
実機の場合はシングルユーザーモード(`systemctl rescue`)に入り /etc/pam.d/ を修正する。クラウドVMの場合はOSボリュームを別インスタンスにアタッチして /etc/pam.d/system-auth を直接編集して対処する。
本記事のまとめ
LinuxのPAM設定のポイントをまとめる。| やりたいこと | 設定箇所・コマンド |
|---|---|
| パスワード強度ポリシーを設定する | /etc/security/pwquality.conf + pam_pwquality |
| ログイン失敗ロックを設定する | /etc/security/faillock.conf + pam_faillock |
| RHEL 9でPAMスタックを管理する | authselect select sssd with-faillock |
| ロック状態を確認する | faillock --user ユーザー名 |
| ロックを手動解除する | faillock --user ユーザー名 --reset |
| ログイン時のリソース制限を設定する | /etc/security/limits.conf + pam_limits |
| PAM認証ログを確認する(RHEL) | tail -f /var/log/secure |
| PAM認証ログを確認する(Ubuntu) | tail -f /var/log/auth.log |
LinuxのPAM設定を「実務の型」として身につけませんか?
PAMの設定方法は調べれば分かります。でも「なぜfaillockのdenyを5回に設定するのか」「設定ミスでロックアウトした時にどう対処するか」を説明できますか?
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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