Linux-PAM (Pluggable Authentication Modules for Linux)可插拔认证模块。Linux-PAM是一套适用于Linux的身份验证共享库系统,它为系统中的应用程序或服务提供动态身份验证模块支持。在Linux中,PAM是可动态配置的,本地系统管理员可以自由选择应用程序如何对用户进行身份验证。PAM应用在许多程序与服务上,比如登录程序(login、su)的PAM身份验证(口令认证、限制登录),passwd强制密码,用户进程实时管理,向用户分配系统资源等。
PAM的主要特征是认证的性质是可动态配置的。PAM的核心部分是库(libpam)和PAM模块的集合,它们是位于文件夹/lib/security/中的动态链接库(.so)文件,以及位于/etc/pam.d/目录中(或者是/etc/pam.conf配置文件)的各个PAM模块配置文件。/etc/pam.d/目录中定义了各种程序和服务的PAM配置文件,其中system-auth文件是PAM模块的重要配置文件,它主要负责用户登录系统的身份认证工作,不仅如此,其他的应用程序或服务可以通过include接口来调用它(该文件是system-auth-ac的软链接)。此外password-auth配置文件也是与身份验证相关的重要配置文件,比如用户的远程登录验证(SSH登录)就通过它调用。而在Ubuntu、SUSE Linux等发行版中,PAM主要配置文件是common-auth、common-account、common-password、common-session这四个文件,所有的应用程序和服务的主要PAM配置都可以通过它们来调用。
使用如下命令判断程序是否使用了PAM:
root@test~ # ldd /usr/bin/passwd | grep libpam
libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007fb74f748000)
libpam.so.0 => /lib64/libpam.so.0 (0x00007fb74eb45000)
如看到有类似的输出,说明该程序使用了PAM,没有输出,则没有使用。
pam_tally2模块用于某些数对系统进行失败的ssh登录尝试后锁定用户帐户。 此模块保留已尝试访问的计数和过多的失败尝试。
pam_tally2模块有两个部分,一个是pam_tally2.so,另一个是pam_tally2。 它是基于PAM模块上,并且可以被用于检查和调节计数器文件。 它可以显示用户登录尝试次数,单独设置计数,解锁所有用户计数。
PAM身份验证配置文件
/etc/pam.d/目录包含应用程序的PAM配置文件。例如,login程序将其程序/服务名称定义为login,与之对应的PAM配置文件为/etc/pam.d/login。
PAM配置文件语法格式
每个PAM配置文件都包含一组指令,用于定义模块以及控制标志和参数。每条指令都有一个简单的语法,用于标识模块的目的(接口)和模块的配置设置,语法格式如下:
module_interface control_flag module_name module_arguments
如在/etc/pam.d/password-auth-ac配置文件中(CentOS),其中一行PAM模块接口定义如下

PAM身份验证安全配置实例
一、强制使用强密码(用户密码安全配置)
PAM配置文件:/etc/pam.d/system-auth-ac
模块名称:pam_cracklib(仅适用于password模块接口)
模块参数:
minlen=12 密码字符长度不少于12位(默认为9)
lcredit=-1 至少包含1个小写字母
ucredit=-1 至少包含1个大写字母
dcredit=-1 至少包含1个数字
ocredit=-1 至少包含1个特殊字符
retry=3 配置密码时,提示3次用户密码错误输入
difok=6 配置密码时,新密码中至少6个字符与旧密码不同(默认为5)
其他常用参数:
reject_username 新密码中不能包含与用户名称相同的字段
maxrepeat=N 拒绝包含超过N个连续字符的密码,默认值为0表示此检查已禁用
maxsequence=N 拒绝包含大于N的单调字符序列的密码,例如’1234’或’fedcb’,默认情况下即使没有这个参数配置,一般大多数这样的密码都不会通过,除非序列只是密码的一小部分
maxcla***epeat=N 拒绝包含相同类别的N个以上连续字符的密码。默认值为0表示此检查已禁用。
use_authtok 强制使用先前的密码,不提示用户输入新密码(不允许用户修改密码)
例 修改配置/etc/pam.d/system-auth-ac文件,在password模块接口行修改或添加配置参数如下:
password requisite pam_cracklib.so try_first_pass retry=3 type= reject_username minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 difok=6
需要注意的是,我在这里展示的是在RHEL/CentOS下的配置,passwd程序的PAM配置文件涉及主配置文件/etc/pam.d/passwd和/etc/pam.d/system-auth-ac(也可以是/etc/pam.d/password-auth-ac),其中/etc/pam.d/passwd配置文件默认只包含了/etc/pam.d/system-auth-ac配置文件,因此对于以上PAM身份验证密码模块配置,只修改/配置该文件即可。或者在Ubuntu中,配置文件包括:/etc/pam.d/common-password、/etc/pam.d/common-account、/etc/pam.d/common-auth、/etc/pam.d/common-session。
修改如下文件:
/etc/pam.d/sshd (远程ssh)
/etc/pam.d/login (终端)
在第一行下即#%PAM-1.0的下面添加:
auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200

