Pluggable Authentication Modules,缩写为 PAM,是一个在许多现代 Unix 系统中被使用的身份验证框架。它通过插件式的机制为应用程序提供了一种可插拔的、可配置的身份验证方式,能够让系统管理员通过单一的接口控制所有应用程序的身份验证方式。PAM 不仅支持本地的登录和远程的SSH登录,还支持使用web管理界面和主机配置工具进行应用程序和用户的管理,同时还支持其他安全相关的系统服务和应用程序。
PAM 提供了一组接口,用于认证、授权、个人信息管理和密码管理等等。应用程序可以选择调用不同类型的PAM模块来完成指定任务。在每一个应用程序的身份认证流程中,PAM 都会按照配置文件中的要求调用一组 module 来完成对用户身份的验证,通过调用模块的 API 来完成该过程。在 PAM 中,模块是一种可执行的单元,有着各种各样的功能,比如检查密码是否匹配、检查用户是否有相应权限、记录访问日志等,因此可以自由组合、修改、扩展、替代不同的认证和授权方式。
PAM 应用广泛,可以用来支持任何需要用户认证和授权的应用程序,包括远程登录、邮件服务、数据库访问、打印服务、FTP 服务、Web 服务器等等,对于管理员而言,只需要配置一个 PAM 配置文件,就可以控制整个系统安全的认证、授权、个人信息管理和密码管理等。PAM 还可以融入到管理工具中,例如,Redhat 的 authconfig 和 system-config-authentication 工具就使用了 PAM,来对用户进行认证和授权。
在 Linux 系统中,默认情况下 PAM 有很多预定义的规则(例如 /etc/pam.d/login),将这些规则搭配起来便可以实现身份验证。在实际应用中,可以按照实际需要来定制 PAM 规则,使用不同的模块实现不同的身份验证策略,从而确保所部署应用程序的安全性和合规性。除了预定义规则外,管理员还可以自定义添加规则,这样可以使得 PAM 更具有灵活性和可配置性,从而实现各种功能需求。