3.1. Overview

六个模块功能分为四个独立的 Management 组。这些组如下:* authentication account session password *。为了正确定义,模块必须在这些组中的至少一个组中定义所有功能。单个模块可能包含“所有”四个组的必要功能。

3.1.1. 功能独立

模块可以提供的四个服务组的独立性意味着模块应该考虑到可以以任何 Sequences 合法地调用这四个服务中的任何一个的可能性。因此,模块编写者应考虑执行服务的适当性,而无需模块其他部分的事先成功。

作为一个提供信息的示例,请考虑一下应用程序是否可以更改用户的身份验证令牌,而无需首先请求* Linux-PAM 对用户进行身份验证的可能性。在某些情况下,这可能被认为是适当的:root 想要更改一些较小用户的身份验证令牌时。在其他情况下,这可能不合适:当 joe 恶意想要重设 alice 的密码时;或用户以外的其他人希望重置其 KERBEROS *身份验证令牌时。此操作的策略应由任何合理的身份验证方案定义,模块编写者在实现给定模块时应考虑这一点。

3.1.2. 减少 Management 问题

为了避免系统 Management 问题和/etc/pam.conf文件的不良构造,模块开发人员可以定义以下所有六个功能。对于那些不会被调用的函数,模块应返回 PAM_SERVICE_ERR 并将适当的消息写入系统日志。如果认为此操作不合适,则该函数将仅返回 PAM_IGNORE。

3.1.3. 提供给模块的参数

可以将以下每个函数的* flags 参数与 PAM_SILENT 进行逻辑或运算,该值用于通知模块不要传递任何 text *(错误或警告)应用程序。

  • argc argv 参数是从适合于此模块的行中提取的-即, service_name *与应用程序的匹配-在配置 fi 中