第 2 章概述

大多数提供服务的应用程序都是受限制的。换句话说,他们的服务不适用于所有潜在 Client。取而代之的是,应用程序 Client 端必须跳过许多箍,以说服正在服务的应用程序他们有权获得服务。

对 Client 端进行“身份验证”的过程就是 PAM 旨在 Management 的过程。除身份验证外,PAM 还提供帐户 Management,凭据 Management,会话 Management 和身份验证令牌(密码更改)Management 服务。在编写基于 PAM 的应用程序时,必须以对应用程序“透明”的方式提供这些服务,这一点很重要。就是说,在编写应用程序时,无法假设 Client 端将如何进行身份验证。

认证过程由 PAM 库通过调用pam_authenticate()来执行。该函数的返回值将指示命名 Client 端(* user )是否已通过身份验证。如果 PAM 库需要提示用户 Importing 任何信息,例如他们的 name password *,那么它将这样做。如果将 PAM 库配置为使用某种静默协议对用户进行身份验证,它也会这样做。 (例如,后一种情况可能是通过某些硬件接口实现的.)

重要的是要注意,应用程序必须由 PAM 库自行决定是否决定何时提示用户。

但是,PAM 库对于不同风格的应用程序必须同样有效。某些应用程序,例如熟悉的 loginpasswd 都是基于终端的应用程序,在这些情况下与 Client 端的信息交换是纯文本消息。但是,基于图形的应用程序具有更复杂的界面。它们通常通过特殊构造的对话框与用户交互。此外,基于网络的服务要求与 Client 端交换的文本消息经过特殊格式化以进行自动处理:一个这样的示例是 ftpd ,它在每个交换的消息之前都带有数字标识符。

因此,将简单请求呈现给 Client 端非常依赖于服务应用程序将使用的协议。尽管 PAM 要求它驱动整个认证过程,但仍不可能将此类协议的细微之处留给 PAM 库。为了克服这个潜在问题,该应用程序为 PAM 库提供了* conversation 函数。从 PAM 库中调用此函数,并使 PAM 与 Client 端直接交互。该对话功能必须能够执行的事情是提示用户 Importing 文本和/或从用户那里获取文本 Importing 以供 PAM 库进行处理。此功能的详细信息在后面的部分中提供。

例如,PAM 库可以使用提示用户 Importing 密码的请求来调用对话功能。它的工作是将提示请求重新格式化为 Client 可以理解的形式。如果是