Linux PAM: 構成とアプリケーション間のマッピング

Linux PAM: 構成とアプリケーション間のマッピング

/etc/pam.dに複数のファイルがあります。ディストリビューションごとに名前が少し違うと思います。そして、プロセス名と設定(例:chpasswdとpasswd)の間に直接的な関連付けはありません。

どのアプリケーションがどのpamファイルを使用しているのかどこかに定義されていますか?

ベストアンサー1

長い話を短く:ルールはありません。代わりに、アプリケーション開発者の実装によって異なります。

長いバージョン:

プログラムがPAMを使用して認証するときは、以下を呼び出す必要があります。pam_start():

int pam_start(const char *service_name, const char *user, const struct pam_conv *pam_conversation, pam_handle_t **pamh); 

最初のパラメーターservice_nameは、構成を選択するために使用されるパラメーターです。

たとえば、OpenSSHサーバーはpam_start()ソースファイルから次を呼び出しますauth_pam.c

sshpam_err =
    pam_start(SSHD_PAM_SERVICE, user, &store_conv, &sshpam_handle);

定数は  SSH_PAM_SERVICE(同じファイルで)次のように定義されます。

#if !defined(SSHD_PAM_SERVICE)
extern char *__progname;
# define SSHD_PAM_SERVICE       __progname
#endif

また、の値は次__prognameのように定義されますssh.c

__progname = ssh_get_progname(av[0]);

ご存知のように、av[0]Cはバイナリファイルの名前です。したがって、OpenSSHデーモンバイナリの名前がある場合は、sshdpam_start()のようにsshdなりますservice_name

(私はこのssh_get_progname()電話を無視したことに注意してください。しかし、私の答えにはまだ十分だと思います。)

おすすめ記事