# 实验环境Centos 6.5 64位系统
1、配置文件在/etc/pam.d/ 目录下
2、使用ldd命令查看程序是否支持PAM
ldd `which sshd` | grep -i "pam"
3、以sshd服务为例:
语法格式为:service type control module-path module-arguments
<可以通过 man pam.d 查看详细信息>
service:
auth: 主要是接受用户名和密码,进而对用户的密码进行认证
account: 主要是检查账户是否被允许登陆系统
password: 主要是更新密码
session: 主要是记录一些信息:opening/closing some data exchange with a user, mounting dir, etc.
type:
required: 必须通过此认证,但是如果失败,失败的结果也不会立即通知用户,而是要等到同一stack中的所有模块全部执行完毕再将失败结果返回给应用程序。<例如,用户在登陆时,使用的用户名不存在,也不会立即提示用户名错误,而是要等输完密码后才提示,起到一定的防破解作用。>
requisite: 与required类似,但是不同之处在于,如果返回失败,将不会再执行同一stack内的任何模块,而是直接将控制权返回给应用程序。
sufficient: 表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack内的其他模块,但是如果本模块返回失败的话可以忽略。
optional:表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略。
include: 包括指定的配置文件中的所有行。
module-path: 用来指定模块的路径,默认路径在 /lib64/security/ 目录 <系统不同,位置可能不同,可以通过 `rpm -ql pam` 查看pam包将模块装到了什么地方。>
module_arguments: 模块执行时候的参数,可以使用[man 模块名] 来查看详细参数。
4、常用模块<可以使用 man module_name 查看模块的具体使用方法和应用的位置>:
pam_nologin.so: 如果存在/etc/nologin文件,则不允许除root外的所有普通用户登陆。
pam_tally2.so: 用户在登陆系统时,输错密码多少次,锁定用户多长时间 (通过 man pam_tally2 查看详细信息),例如: 输错两次密码锁定用户,也包括root,锁定时间为100s
<auth required pam_tally2.so deny=2 even_deny_root unlock_time=100>
查看当前锁定的用户: pam_tally2 手动解锁被锁定用户: pam_tally2 -u username -r
pam_time.so: 指定用户在指定终端的指定时间访问指定程序。配置文件为 /etc/security/time.conf。例如:
sshd;*;bloke;!Al0000-0800 & Al1800-2400
#在每天的零点到八点和每天的18点到24点之间不允许在任何终端登录系统。
pam_timestamp: 和使用sudo类似,在认证成功后指定时间内不需要再次认证,默认是300s。
5、在设置时,需要注意顺序和type