PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系 统中添加新的认证手段。从本篇开始会总结一些常用的pam模块及其实现的功能,今天讲的是pam_tally2模块。

一、参数与场景

应用场景:设置Linux用户连续N次输入错误密码进行登陆时,自动锁定X分钟或永久锁定(这里的永久锁定指除非进行手工解锁,否则会一直锁定)。

配置格式:

1pam_tally2.so [file=/path/to/counter] [onerr=[fail|succeed]] [magic_root] [even_deny_root] [deny=n] [lock_time=n] [unlock_time=n]
2              [root_unlock_time=n] [serialize] [audit] [silent] [no_log_info]

参数相关:

1、全局参数

  • file 用于指定统计次数存放的位置,默认保存在/var/log/tallylog文件中;
  • onerr 当意外发生时,返加PAM_SUCCESS或pam错误代码,一般该项不进行配置;
  • audit 如果登录的用户不存在,则将访问信息写入系统日志;
  • silent 静默模式,不输出任何日志信息;
  • no_log_info 不打印日志信息通过syslog

上面的五项全局参数,一般在使用中都不需要单独配置。

2、认证选项

  • deny 指定最大几次认证错误,如果超出此错误,将执行后面的策略。如锁定N秒,如果后面没有其他策略指定时,默认永远锁定,除非手动解锁。
  • lock_time 锁定多长时间,按秒为单位;
  • unlock_time 指定认证被锁后,多长时间自动解锁用户;
  • magic_root 如果用户uid=0(即root账户或相当于root的帐户)在帐户认证时调用该模块发现失败时,不计入统计;
  • no_lock_time 不使用.fail_locktime项在/var/log/faillog 中记录用户 ---按英文直译不太明白,个人理解即不进行用户锁定;
  • even_deny_root root用户在认证出错时,一样被锁定(该功能慎用,搞不好就要单用户时解锁了)
  • root_unlock_time root用户在失败时,锁定多长时间。该选项一般是配合even_deny_root 一起使用的。

二、使用示例

1、示例:

1auth required pam_tally2.so deny=3 unlock_time=5 even_deny_root root_unlock_time=10

最多连续三认认证登录都出错时,5秒后解锁,root用户也可以被锁定,root用户10秒后解锁。

  • /etc/pam.d/login中配置只在本地文本终端上做限制;
  • /etc/pam.d/kde在配置时在kde图形界面调用时限制;
  • /etc/pam.d/sshd中配置时在通过ssh连接时做限制;
  • /etc/pam.d/system-auth中配置凡是调用 system-auth 文件的服务,都会生效。

以下是pam_tally2的man手册中,给出的一个pam下的login调用该模块的示例:

 1auth     required       pam_securetty.so
 2auth     required       pam_tally2.so deny=4 even_deny_root unlock_time=1200
 3auth     required       pam_env.so
 4auth     required       pam_unix.so
 5auth     required       pam_nologin.so
 6account  required       pam_unix.so
 7password required       pam_unix.so
 8session  required       pam_limits.so
 9session  required       pam_unix.so
10session  required       pam_lastlog.so nowtmp
11session  optional       pam_mail.so standard

注:pam_tally2与pam_tally模块的区别是前者增加了自动解锁时间的功能,后者没有。所以在老的发行版中,如果使用了pam_tally模块时,可以使用pam_tally 、faillog配合crontab 进行自动解锁。

2、解锁与查看失败

可以通过以下指令查看361way用户登录的错误次数及详细信息:

1pam_tally2 --user 361way

可以通过以下命令清空361way用户的错误登录次数,即手动解锁:

1pam_tally2 --user 361way --reset

同样,使用faillog -r命令也可以进行解锁。