共计 4553 个字符,预计需要花费 12 分钟才能阅读完成。
在 Linux 系统中,用户多次登录失败会被锁定,一段时间内将不能再登录系统,这是一般会用到 Pam_Tally2 进行账户解锁。
了解 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 模块的重要配置文件,它主要负责用户登录系统的身份认证工作,不仅如此,其他的应用程序或服务可以通过 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
各参数解释:
even_deny_root 也限制 root 用户;
deny 设置普通用户和 root 用户连续错误登陆的最大次数,超过最大次数,则锁定该用户
unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;
root_unlock_time 设定 root 用户锁定后,多少时间后解锁,单位是秒;
手动解除锁定:
查看某一用户错误登陆次数:
pam_tally –user
例如,查看 work 用户的错误登陆次数:
pam_tally –user work
清空某一用户错误登陆次数:
pam_tally –user –reset
例如,清空 work 用户的错误登陆次数,
pam_tally –user work –-reset
如果使用 pam_tally 没生效的话,也可以使用 pam_tally2 命令:
pam_tally2 –u tom –reset 将用户的计数器重置清零(SLES 11.2 和 12 版本下用此命令才重置成功)
查看错误登录次数:pam_tally2 –u tom
faillog -r 命令清空所有用户错误登录次数
在服务器端以 root 用户登录
执行命令:
# faillog –a //// 查看用户登录错误次数
faillog -u user –r //// 清空指定用户 user 的错误登录次数
如果超过三次的话,用户不能登录并且此后登录用户错误登录次数还是会增加。
在登录错误次数不满三次时,登录成功后,则这个用户登录错误值将清零,退出后重新 telnet 登录将采用新的计数。
其他例子:
Pam_tally2 锁定 SSH 登录
默认情况下,pam_tally2 模块已经安装在大多数 Linux 发行版,它是由 PAM 包本身的控制。本文演示如何锁定和深远的登录尝试的失败一定次数后解锁 SSH 帐户。
如何锁定和解锁用户帐户
使用“/etc/pam.d/password-auth”配置文件来配置的登录尝试的访问。打开此文件并以下 AUTH 配置行举行的“身份验证”部分的开头添加到它。
auth required pam_tally2.so file=/var/log/tallylog deny=3 even_deny_root unlock_time=1200
接下来,添加以下行“账户”部分。
account required pam_tally2.so
参数
文件 = / 无功 / 日志 / tallylog - 默认的日志文件是用来保持登录计数。
否认 = 3 - 拒绝后,3 次尝试访问和锁定用户。
even_deny_root - 政策也适用于 root 用户。
unlock_time = 1200 - 帐户将被锁定,直到 20 分钟。(如果要永久锁定,直到手动解锁,请删除此参数。)
一旦你使用上面的配置完成,现在尽量尝试使用任何“用户名”3 失败的登录尝试到服务器。当你取得了超过 3 次,你会收到以下消息。
[root@test01 ~]# ssh test01@172.16.25.126
test01@172.16.25.126’s password:
Permission denied, please try again.
test01@172.16.25.126’s password:
Permission denied, please try again.
test01@172.16.25.126’s password:
Account locked due to 4 failed logins
Account locked due to 5 failed logins
Last login: Mon Apr 22 21:21:06 2017 from 172.16.16.52
现在,使用以下命令验证或检查用户尝试的计数器。
[root@test01 ~]# pam_tally2 –user=test01
Login Failures Latest failure From
test01 15 04/22/17 21:22:37 172.16.16.52
如何重置或解锁用户帐户以再次启用访问。
[root@test01 pam.d]# pam_tally2 –user=test01 –reset
Login Failures Latest failure From
test01 15 04/22/13 17:10:42 172.16.16.52
验证登录尝试已重置或解锁
[root@test01 pam.d]# pam_tally2 –user=test01
Login Failures Latest failure From
test01 0
PAM 模块是所有 Linux 发行版中都有的,在命令行中执行“pam_tally2”可更多地了解它。
:
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)