Linuxサーバを設定していると、/etc/pam.d/su や /etc/pam.d/system-auth のような PAM 設定ファイルの中に、pam_xxx.so という記述がたくさん出てきます。
「.soって何?」「どうして付いているものと付いていないものがあるの?」
と疑問に思ったので備忘録としてまとめました。
.so とは何か?
Linux の世界で .so は Shared Object(共有ライブラリ) の拡張子です。
Windows でいうところの「.dll(ダイナミックリンクライブラリ)」に相当します
・実行ファイル(プログラム)が必要に応じて呼び出す「部品」
・例えば、認証、ログ記録、リソース制限などの処理を担当
Linux では /usr/lib64/security/ などに PAM 用の .so ファイルが置かれています。
PAM設定での .so
PAM(Pluggable Authentication Modules)は、ログインや su、sudo などの認証を柔軟に制御する仕組みです。
設定ファイル /etc/pam.d/* の中で pam_xxx.so と書かれているのは 実際に処理を行うモジュール を呼び出しているという意味になります。
例: /etc/pam.d/su より
auth sufficient pam_rootok.so
auth substack system-auth
・pam_rootok.so → 実行ユーザーが root なら認証成功と判断するモジュール
・substack system-auth → .so ではなく「system-auth ファイルを読み込む」ディレクティブ
.so が付くものと付かないものの違い
・.so が付くもの
→ 実際の処理を行うライブラリ(例: pam_unix.so, pam_rootok.so)
・.so が付かないもの
→ include / substack のように「別設定を呼び出す」ディレクティブ(モジュールそのものではない)
よく使う pam_xxx.so モジュール一覧
代表的な pam_xxx.so モジュールの意味を整理します。
| モジュール | 役割 |
|---|---|
| pam_env.so | 環境変数の設定 |
| pam_rootok.so | 実行ユーザーが root なら即成功(パスワード不要) |
| pam_wheel.so | wheel グループに所属しているかを制御 |
| pam_unix.so | /etc/passwd, /etc/shadow に基づく通常のUNIX認証 |
| pam_faillock.so | 認証失敗回数を記録しロックアウト制御 |
| pam_pwquality.so | パスワード強度チェック |
| pam_limits.so | /etc/security/limits.conf に基づきリソース制限設定 |
| pam_lastlog.so | 最終ログイン情報を表示 |
| pam_xauth.so | su などで X11 認証情報を引き継ぐ |
制御フラグ(required, sufficient など)
PAM では各モジュールに「制御フラグ」を設定します。
その成否が認証全体にどう影響するかを定義します。
| フラグ | 意味 |
|---|---|
| required | 必須。失敗したら最終的に認証全体が失敗。ただし処理は続行される。 |
| requisite | 必須。失敗した時点で即認証全体を失敗させる。 |
| sufficient | 成功したら十分条件。以降をスキップ可能。失敗しても致命的ではない。 |
| optional | 任意。成功/失敗は認証結果に影響しない(ログ記録や追加処理用)。 |
| include | 他の設定ファイルを読み込む。 |
| substack | 他の設定を読み込むが、戻り値の扱いが異なる。 |
実際の動作まとめ
RHEL9 のデフォルト設定を読み解くと以下のようになります。
- root → 他ユーザーへの su
→pam_rootok.soが有効なのでパスワード不要で su 可能 - 一般ユーザー → 他ユーザーへの su
→system-authを経由して UNIX パスワード認証が必要 - wheel グループ制御
→ コメントアウトされているので無効。誰でも su を試行可能
まとめ
.soは 共有ライブラリ(Shared Object) で、実際の処理を行うモジュール.soが付いていないのは「include」や「substack」といった構文- 代表的な pam_xxx.so を覚えておくと設定ファイルの読み解きが楽になる
