PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系 统中添加新的认证手段。
1.pam相关的配置文件 /usr/lib/libpam.so.* PAM核心库 /etc/pam.conf(旧版本)或者/etc/pam.d/ PAM配置文件 /usr/lib/security/pam_*.so 可动态加载的PAM service module 对于RedHat,其目录不是/usr/lib,而是/lib。PAM的配置是通过单个配置文件/etc/pam.conf。RedHat还支持另外一种配置方式,即通过配 置目录/etc/pam.d/,且这种的优先级要高于单 个配置文件的方式。
2.PAM 模块是按模块类型归类的。任何给定的模块至少要实现四种模块类型功能之一:
验证模块用于验证用户或设置/销毁凭证。
帐户管理模块将执行与访问、帐户及凭证有效期、密码限制/规则等有关的操作。
会话管理模块用于初始化和终止会话。
密码管理模块将执行与密码更改/更新有关的操作。
PAM 将提供不同的功能,例如单点登录验证、访问控制等。每个功能的实现都是由不同的模块处理的。下面是一些主要模块:
pam_access 将使用登录名/域名,根据 /etc/security/access.conf 中的预定义规则交付日志守护进程样式的登录访问控制。
pam_cracklib 将根据密码规则检查密码。 pam_env sets/unsets 环境变量来自 /etc/security/pam_env_conf。 pam_debug 将调试 PAM。 pam_deny 将拒绝 PAM 模块。 pam_echo 将打印消息。 pam_exec 将执行外部命令。 pam_ftp 是匿名访问模块。 pam_localuser 要求将用户列于 /etc/passwd 中。 pam_unix 将通过 /etc/passwd 提供传统密码验证。
例1.更改密码复杂度
vim /etc/pam.d/system-auth(本地) password requisite pam_cracklib.so try_first_pass retry=3(最多尝试次数) type= ucredit=-2(大写字母) lcredit=-1(小写字母) dcredit=-3 (数字)minclass=3 (种类) minlen=8(最小长度) ocredit(特殊字符)
例2.登录失败锁定账户
vim /etc/pam.d/system-auth(本地) vim /etc/pam.d/password-auth(网络) required pam_tally2.so deny=4 even_deny_root unlock_time=60 #在root权限下解锁账户 pam_tally2 -r -u cqwu (解锁账户)