LinuxのPAM設定入門|/etc/pam.d/の仕組みとpam_pwquality・pam_faillockでセキュリティを設計する方法

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, セキュリティ > LinuxのPAM設定入門|/etc/pam.d/の仕組みとpam_pwquality・pam_faillockでセキュリティを設計する方法
「SSHへのパスワード総当たり攻撃が心配だ」「ユーザーが設定するパスワードをOS側で強度チェックしたい」「一定回数ログイン失敗したらアカウントをロックする仕組みを入れたい」

こうした認証回りのセキュリティ強化で真っ先に手をつけるべきは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で連続失敗ロックを実装しブルートフォース攻撃を緩和できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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

RHEL 9 / Rocky Linux 9 では `system-auth` と `password-auth` の2ファイルが共通設定のハブになっており、sshdやsudoはこれらをinclude/substack経由で参照する。

# /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

Ubuntu 24.04 では `/etc/pam.d/common-password` に含まれる。

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:

rootはrequisiteで弾かれるため、エラーメッセージが即表示される。

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_limits が session スタックに required で組み込まれていれば、ログイン時に自動的にリソース制限が適用される。

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

RHEL 9で /etc/pam.d/ を直接編集してしまった場合
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
PAMの設定ミスはサーバーのログイン不能という深刻な障害に直結する。変更前に必ず別セッションを確保し、認証ログでエラーが出ていないことを確認しながら一つずつ設定を入れていくことが鉄則だ。

LinuxのPAM設定を「実務の型」として身につけませんか?

PAMの設定方法は調べれば分かります。でも「なぜfaillockのdenyを5回に設定するのか」「設定ミスでロックアウトした時にどう対処するか」を説明できますか?
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。