目录
PAM简介
PAM配置文件说明
1、PAM的模块类型
2、PAM的控制标记
3、常用PAM模块介绍
密码策略修改的主要参数
1 pam_cracklib模块
2、pam_unix模块
PAM简介
Linux 用户密码的策略可以通过pam_cracklib module控制
PAM 的全称为"可插拔认证模块(Pluggable Authentication Modules)",是一套共享库,使本地系统管理员可以随意选择程序的认证方式。不用重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制。
PAM使用配置/etc/pam.d/下的文件,来管理对程序的认证方式.应用程序 调用相应的配置文件,从而调用本地的认证模块。
PAM配置文件说明
PAM的配置文件类似于/etc/pam.d/lightdm
1、PAM的模块类型
PAM有四种模块类型,分别代表四种不同的任务,它们是:认证管理(auth),账号管理(account),会话管理(session)和密码(password)管理,一个类型可能有多行,它们按顺序依次由PAM模块调用。详细说明如表2-1所示
表 2-1
管理方式 | 说明 |
auth | 用来对用户的身份进行识别,如:提示用户输入密码,或者判断用户是否为root等 |
account | 对账号的各项属性进行检查,如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等 |
session | 这个模块用来定义用户登录前的,以及用户登录退出后要进行的操作,如:登录连接信息,用户数据的打开与关闭,挂在文件系统等 |
password | 使用用户信息来更新,如:修改用户密码 |
2、PAM的控制标记
规定如何处理PAM模块鉴别认证的结果,简而言之就是鉴别认证成功或者失败之后会发生什么事,如何进行控制。具体说明如表2-2所示
表 2-2
管理方式 | 说明 |
Required | 表示该行以及所涉及模块的成功是用户通过鉴别的必要条件。换句话说,只有当对应于应用程序的所有带 required标记的模块全部成功后,该程序才能通过鉴别。就是必须将所有的模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。 |
requisite | 与required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。 |
sufficient | 表示该行以及所涉及模块验证成功是用户通过鉴别的充分条件。也就是说只要标记为sufficient的模块一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。即便后面的层叠模块使用了requisite或者required控制标志也是一样。当标记为sufficient的模块失败时,sufficient模块会当做 optional对待。 |
optional | 他表示即便该行所涉及的模块验证失败用户仍能通过认证。在PAM体系中,带有该标记的模块失败后将继续处理下一模块。也就是说即使本行指定的模块验证失败,也允许用户享受应用程序提供的服务。 |
include | 表示在验证过程中调用其他的PAM配置文件。 |
3、常用PAM模块介绍
表 2-3
PAM模块 | 结合管理类型 | 说明 |
pam_unix.so | auth | 提示用户输入密码,并与/etc/shadow文件相比对.匹配返回0 |
account | 检查用户的账号信息(包括是否过期等).帐号可用时,返回0. | |
password | 修改用户的密码. 将用户输入的密码,作为用户的新密码更新shadow文件 | |
pam_shells.so | auth | 如果用户想登录系统,那么它的shell必须是在/etc/shells文件中之一的shell |
account | ||
pam_deny.so | account | 模块任何时候都返回成功. |
auth | ||
password | ||
session | ||
pam_permit.so | auth | 模块任何时候都返回成功. |
account | ||
password | ||
session | ||
pam_securetty.so | auth | 如果用户要以root登录时,则登录的tty必须在/etc/securetty之中. |
pam_listfile.so | auth | 访问应用程的控制开关 |
account | ||
password | ||
session | ||
pam_cracklib.so | password | 用于检查密码的强度. |
pam_limits.so | session | 定义使用系统资源的上限,root用户也会受此限制,可以通过/etc/security/limits.conf或/etc/security/limits.d/*.conf来设定 |
密码策略修改的主要参数
1 pam_cracklib模块
pam_cracklib是一个PAM模块,用来检查密码是否违反密码字典,这个验证模块可以通过插入password堆栈,为特殊的应用提供可插入式密码强度性检测。 它的工作方式就是先提示用户输入密码,然后使用一个系统字典和一套规则来检测输入的密码是否能满足复杂要求。下面是cracklib模块的一些参数:
表 3-1
Pam_cracklib参数及格式 | 说明 |
retry=N | 用户最多可以几次输入密码后报错。默认是1次。 |
difok=N | 新密码有几个字符不能和旧密码相同,默认是5个。 |
minlen=N | 最小密码长度。 |
dcredit=N | 当N>=0时,表示密码最多可以有N个阿拉伯数字。当N<0时,表示密码最少要有N个阿拉伯数字。 |
ucredit=N | 当N>=0时,表示密码最多可以有N个大写字母。当N<0时,表示密码最少要有N个大写字母。 |
lcredit=N | 当N>=0时,表示密码最多可以有N个小写字母。当N<0时,表示密码最少要有N个小写字母。 |
ocredit=N | 当N>=0时,表示密码最多可以有N个特殊字符。当N<0时,表示密码最少要有N个特殊字符。 |
pam_cracklib 模块是PAM配置接口的基本模块,在我们系统中的配置文件是 /etc/pam.d/common-password,
可以看出系统默认使用的修改密码策略是最小密码长度为8,新密码有三个字符不能与旧密码相同,用户在输错一次密码后报错。
2、pam_unix模块
pam_cracklib可以记录用户使用的历史密码,并且不允许用户重复使用旧的密码,实际上存储用户旧密码的是通过pam_unix模块实现的。
第一步是建立一个空文件用来存储旧密码/etc/security/opasswd,如果你没有建立文件却使用了历史密码记录功能的话,所有的密码更新都会失败,因为pam_unix模块会报错。建立了opasswd文件,就可以在pam_unix模块后面加上参数remember=N来开始记录旧密码,remember参数记录你想记录多少旧密码,最大值是400
现在有需求要对系统密码验证安全进行加固,设置密码复杂策略,要求密码中使用大小写字母,数字以及特殊符号,用户最多可以三次输入密码后报错,并记录用户之前使用最近的三次密码,新密码不能与这三次密码相同。修改/etc/pam.d/common-passwd