PAM設定ファイルは,どれが読み込まれるのか?

Linux-PAM(pam(8))が入っているような,いまどきの普通のシステムでは,/etc/pam.dディレクトリ(または/etc/pam.confファイル)が存在する.各プログラム(デーモンなど)が認証処理を行う必要があるときに,ここから設定ファイルを読み込んで,PAMを通じて必要な処理を行う.例えば,sshdの場合,/etc/pam.d/sshdを読み込んで認証処理を行う.

ところで,各プログラムはどのようにして自身が読み込むファイル名(サービス名)を決めているのだろう? 結論を先に書くと,各プログラムがpam_start(3)を呼ぶ時の第一引数(サービス名)によって決まる.

例えば,OpenSSH(sshd)のコードを追ってみると,次のようなコードが見つかる.

auth-pam.c
pam_start(SSHD_PAM_SERVICE, user, &store_conv, &sshpam_handle);

SSHD_PAM_SERVICEは #define SSHD_PAM_SERVICE __progname と定義されていて,結局のところこれはsshd.cではargv[0]のbasename(ファイル名の部分)である.つまり,自身のファイル名となっていることがわかる.

まとめ

  • PAMを用いるプログラムが読み込むPAM設定ファイルは,pam_start(3)の第一引数(サービス名)によって決まる
  • サービス名は,OpenSSHのsshdではプログラム自身のファイル名となっている
  • そういう事情なので,sshdのファイル名を変更した場合は,/etc/pam.d/sshdも名前を変更しよう
  • 他のプログラムでは当然事情が異なる.不明な場合はpam_start(3)を呼んでいる所を探して調べよう