面向开发者的 Oracle® Solaris 11 安全性指南

退出打印视图

更新时间: 2014 年 7 月
 
 

PAM 服务提供者要求

PAM 服务模块使用 pam_get_item(3PAM)pam_set_item(3PAM) 与应用程序进行通信。要相互进行通信,服务模块需要使用 pam_get_data(3PAM)pam_set_data(3PAM)。如果同一项目的服务模块需要交换数据,则应建立该项目的唯一数据名称。然后,服务模块即可通过 pam_get_data()pam_set_data() 函数共享此数据。

    服务模块必须返回以下三类 PAM 返回码之一:

  • 如果模块在所请求的策略中做出了明确决定,则返回 PAM_SUCCESS。

  • 如果模块未做出策略决定,则返回 PAM_IGNORE。

  • 如果模块参与的决定导致失败,则返回 PAM_errorerror 可以是常规错误代码或特定于服务模块类型的代码。错误不能是其他服务模块类型的错误代码。有关错误代码,请参见特定的 pam_sm_module-type 手册页。

如果服务模块执行多个函数,则应将这些函数分成单独的模块。使用此方法,系统管理员可对策略配置进行更为精细的控制。

    应该为任何新的服务模块提供手册页。手册页应该包括以下各项:

  • 模块接受的参数。

  • 模块实现的所有函数。

  • 标志对算法的影响。

  • 任何所需的 PAM 项。

  • 特定于此模块的错误返回信息。

服务模块必须支持 PAM_SILENT 标志,以防止显示消息。建议使用 debug 参数将调试信息记录到 syslog 中。请将 syslog (3C) 与 LOG_AUTH 和 LOG_DEBUG 结合使用来记录调试。其他消息应发送到具有 LOG_AUTH 和相应优先级的 syslog()。决不能使用 openlog(3C)closelog(3C)setlogmask(3C),因为这些函数会干扰应用程序设置。