Linux

LinuxのPAM設定に出てくる「.so」とは?

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.sowheel グループに所属しているかを制御
pam_unix.so/etc/passwd, /etc/sha​dow に基づく通常のUNIX認証
pam_faillock.so認証失敗回数を記録しロックアウト制御
pam_pwquality.soパスワード強度チェック
pam_limits.so/etc/security/limits.conf に基づきリソース制限設定
pam_lastlog.so最終ログイン情報を表示
pam_xauth.sosu などで 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 を覚えておくと設定ファイルの読み解きが楽になる
ABOUT ME
湖山 貴裕
はじめまして。 二児のお父さんプログラマーです。最近キャンプにも興味あり。夏には庭でキャンプしようともくろみ中。ボドゲ好き。チョコ好き。茶道経験者。 2012年大学卒業→IT企業就職 Java,VB.NET, C#, javascript等の企業向けシステム開発/主にバックエンドを担当/AWSを少しかじる→2020年フリーランスエンジニアへ転身 広島でAWS案件にて楽しく活動中