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)を呼んでいる所を探して調べよう