変更要約: 初版(主題2.07・副主題2.07.1〜2.07.4に対応)
1.2PAM認証
Linux の認証を差し替え可能にする仕組み PAM(Pluggable Authentication Modules)を学びます。設定ディレクトリ /etc/pam.d/ と旧来の一元設定 pam.conf、名前解決の順序を決める nsswitch.conf、外部ディレクトリ連携の sssd.conf、代表的なモジュール pam_unix・pam_cracklib・pam_limits・pam_listfile・pam_sss を押さえます。
パスワードでログイン確認するのか、外部の LDAP/Active Directory に問い合わせるのか、二要素認証を追加するのか — こうした認証方式の切り替えをアプリケーションを改修せずに実現するのが PAM(Pluggable Authentication Modules)です。sshd や login、su など多くのサービスが認証を PAM に委ねており、202試験ではネットワーク認証基盤の要として重点的に問われます(重要度3)。
1.2.1設定ファイルとスタック構造
- 各サービス(sshd・login・su 等)向けの PAM 設定は /etc/pam.d/ 配下にサービス名と同名のファイルとして置く(例
/etc/pam.d/sshd)。古い方式では全サービスを1ファイルにまとめる pam.conf も存在する。 - 各設定ファイルは auth(本人確認)・account(アカウント状態の確認)・password(パスワード変更)・session(セッション開始/終了時の処理) の4種の管理グループでモジュールを積み重ねたスタックとして記述する。各行は
required/requisite/sufficient/optionalの制御フラグでモジュールの合否をどう扱うかを決める。 - 名前解決(ユーザー・グループ情報をどこから引くか)の優先順位を決めるのが nsswitch.conf(例
passwd: files sssならまずローカルファイル、次に sssd)。PAM のモジュール選定とは別レイヤーだが、外部認証連携では両方を整合させる必要がある。
1.2.2代表的なPAMモジュールと外部連携
- pam_unix=
/etc/passwd・/etc/shadowによるローカルの標準的なユーザー認証・パスワード管理を行う、最も基本的なモジュール。 - pam_cracklib=password グループで使い、辞書に載っている単純な単語や短すぎるパスワードを弾く強度チェックを行う。
- pam_limits=session グループで使い、
/etc/security/limits.confに基づきログインユーザーごとの資源制限(最大プロセス数・オープンファイル数等)を適用する。 - pam_listfile=任意のリストファイルに載っているユーザー/グループを許可または拒否する汎用モジュール(例:特定サービスへのログインを許可リストで制限)。
- pam_sss=sssd(System Security Services Daemon)経由で LDAP/Active Directory 等の外部ディレクトリに認証・アカウント情報を問い合わせるモジュール。sssd 自体の挙動は sssd.conf で設定する。
「サービスごとの設定は /etc/pam.d/<サービス名>」「管理グループは auth/account/password/session の4種」「強度チェック=pam_cracklib」「資源制限=pam_limits」「外部ディレクトリ連携=pam_sss(+sssd.conf)」 の対応づけが最頻出です。nsswitch.conf は PAM 本体の設定ではなく名前解決の順序を決める別ファイルである点も混同しないでください。
実務シナリオで積み上げましょう。SSH ログインのパスワード強度を強化したい場合、/etc/pam.d/sshd(または共通設定を集約した password-auth 等)の password グループに pam_cracklib の行を足し、単純なパスワードへの変更を拒否させます。一方、ログインユーザーが同時に開けるファイル数やプロセス数に上限を設けたい場合は、session グループに pam_limits を置き、/etc/security/limits.conf に user01 hard nproc 100 のような行を書きます。社内の Active Directory と連携してログイン認証を一本化したい場合は、sssd をインストールして sssd.conf に接続先ドメインや認証方式を設定し、/etc/pam.d/ の該当サービスに pam_sss を組み込みます。この際、ユーザー情報の検索順序を管理する nsswitch.conf の passwd/group 行にも sss を追記しないと、PAM が認証に成功してもアカウント情報の解決に失敗することがあるため、両方の整合が実務上のポイントです。特定のメンテナンス用サービスだけ、決まったユーザーの一覧にしかログインを許可したくない場合は pam_listfile で許可リストを指定します。
| モジュール/ファイル | 役割 | 管理グループ/レイヤー |
|---|---|---|
| pam_unix | ローカルの標準認証(/etc/passwd,shadow) | auth/account/password/session |
| pam_cracklib | パスワード強度チェック | password |
| pam_limits | 資源制限(limits.conf) | session |
| pam_listfile | リストによる許可/拒否 | auth 等汎用 |
| pam_sss / sssd.conf | 外部ディレクトリ連携 | sssd 経由(別レイヤー:nsswitch.conf と整合要) |
ひっかけ: 「ユーザーの資源制限(プロセス数上限等)は pam_cracklib で設定する」は誤りです。資源制限はpam_limits(/etc/security/limits.conf と連動)の役割で、pam_cracklib はパスワード強度チェック専用です。また「nsswitch.conf は PAM モジュールの一種である」も誤り=nsswitch.conf は PAM とは別の、名前解決の順序を決めるファイルです。
1.2.3この節のまとめ
- 設定=/etc/pam.d/<サービス名>(4グループ auth/account/password/session)。強度=pam_cracklib/制限=pam_limits/許可リスト=pam_listfile
- 外部連携=pam_sss + sssd.conf。名前解決順序は別ファイル nsswitch.conf と要整合
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. sshd サービスのパスワード変更時に、単純すぎるパスワード(辞書に載っている単語等)を拒否させたい。組み込むべき PAM モジュールはどれ?
Q2. 社内の Active Directory と連携してログイン認証を一本化する構成にした。認証は成功するのにユーザー情報(UID/GID 等)の解決が失敗する場合、追加で確認・修正すべき設定はどれ?
Q3. PAM の設定ファイルにおける4つの管理グループ(スタックの種類)の組み合わせとして正しいのはどれ?

