使用pam_tally2锁定和解锁SSH失败的登录尝试
pam_tally2模块可于用于在对系统进行一定次数的失败ssh登录尝试后锁定用户
pam_tally2模块分为两部分,一部分是pam_tally2.so,另一部分是pam_tally2。它基于PAM模块,可用于检查和操作计数器文件。它可以显示用户登录尝试次数,单独设置计数,也可清除计数,解锁所有用户登录锁定
一、先说说PAM
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模块的重要配置文件,它主要负责用户登录系统的身份认证工作
1) 如何判断程序是否使用了PAM
2)PAM身份验证配置文件
/etc/pam.d/目录包含应用程序的PAM配置文件
3)PAM配置文件语法格式
每个PAM配置文件都包含一组指令,用于定义模块以及控制标志和参数。每条指令都有一个简单的语法,用于标识模块的目的(接口)和模块的配置设置,语法格式如下:
module_interface control_flag module_name module_arguments
4)PAM模块接口(模块管理组)
PAM为认证任务提供四种类型可用的模块接口,它们分别提供不同的认证服务:
√ auth |
- 认证模块接口,如验证用户身份、检查密码是否可以通过,并设置用户凭据 |
---|---|
√ account |
- 账户模块接口,检查指定账户是否满足当前验证条件,如用户是否有权访问所请求的服务,检查账户是否到期 |
√ password |
- 密码模块接口,用于更改用户密码,以及强制使用强密码配置 |
√ session |
- 会话模块接口,用于管理和配置用户会话。会话在用户成功认证之后启动生效 |
单个PAM库模块可以提供给任何或所有模块接口使用。例如,pam_unix.so提供给四个模块接口使用。
5)PAM控制标志
所有的PAM模块被调用时都会返回成功或者失败的结果,每个PAM模块中由多个对应的控制标志决定结果是否通过或失败。每一个控制标志对应一个处理结果,PAM库将这些通过/失败的结果整合为一个整体的通过/失败结果,然后将结果返回给应用程序。模块可以按特定的顺序堆叠。控制标志是实现用户在对某一个特定的应用程序或服务身份验证的具体实现细节。该控制标志是PAM配置文件中的第二个字段,PAM控制标志如下:
> required |
- 模块结果必须成功才能继续认证,如果在此处测试失败,则继续测试引用在该模块接口的下一个模块,直到所有的模块测试完成,才将结果通知给用户。 |
---|---|
> requisite |
- 模块结果必须成功才能继续认证,如果在此处测试失败,则会立即将失败结果通知给用户。 |
> sufficient |
- 模块结果如果测试失败,将被忽略。如果sufficient模块测试成功,并且之前的required模块没有发生故障,PAM会向应用程序返回通过的结果,不会再调用堆栈中其他模块。 |
> optional |
- 该模块返回的通过/失败结果被忽略。当没有其他模块被引用时,标记为optional模块并且成功验证时该模块才是必须的。该模块被调用来执行一些操作,并不影响模块堆栈的结果。 |
> include |
- 与其他控制标志不同,include与模块结果的处理方式无关。该标志用于直接引用其他PAM模块的配置参数 |
6)PAM配置方法
所有的PAM配置方法都在man手册中有说明,比如要查找某个程序支持PAM模块的配置,可以使用man 加模块名(去掉.so)查找说明,如# man pam_unix。(模块名可以在目录/lib/security/或/lib64/security/中找到。)
man pam_tally2
二、下面演示一下使用Pam_Tally2锁定和解锁SSH失败的登录尝试
根据man pam_tally2帮助说明文档
pam_tally2主要认证选项
* deny 指定最大几次认证错误,如果超出此错误,将执行后面的策略。如锁定N秒,如果后面没有其他策略* 指定时,默认永远锁定,除非手动解锁。
* file 记录日志的路径,默认是/var/log/tallylog
* lock_time 锁定多长时间,按秒为单位;
* unlock_time 指定认证被锁后,多长时间自动解锁用户;
* even_deny_root root用户在认证出错时,一样被锁定
* root_unlock_time root用户在失败时,锁定多长时间。该选项一般是配合even_deny_root 一起使用的。
配置示例
vi /etc/pam.d/sshd auth配置处添加如下一行
auth required pam_tally2.so file=/var/log/tallylog deny=5 unlock_time=30 even_deny_root root_unlock_time=20
account配置处添加account required pam_tally2.so
保存配置后,测试效果
新建连接输错5次密码,SSH登录时root账户会被锁定,使用pam_tally2 -u root查看登录失败的计数
从其它服务器上ssh登录输错5次以上密码,锁定后,待锁定时间结束后,再输入正确密码,登录成功后会有如下类似提示
Account locked due to 13 failed logins
Account locked due to 14 failed logins
如果锁定的时间较长的话,需要手动解锁,清空计数
pam_tally2 -u root -r
pam_tally的主要两个命令参数-u 和-r
本文分享自微信公众号 - WalkingCloud(WalkingCloud2018)
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2019-08-26