1、账户锁定策略介绍
在Linux系统中,为了提高系统安全性,防止暴力破解攻击,我们可以通过配置PAM(Pluggable Authentication Modules)模块来限制登录失败次数并锁定用户账户,本文将详细介绍如何实现这一功能,包括必要的步骤和配置文件的修改。
2、系统环境
系统环境:RedHat 8.0
主要配置文件:/etc/pam.d/login、/etc/pam.d/sshd、/etc/pam.d/gdm-password、system-auth和password-auth
3、账户登录方式
3.1、登录方式
Linux中账户登录验证方式:
1.本地tty登录,这里是使用login命令,从而调用/etc/pam.d/login配置文件,最终调用底层的组件进行密码验证等;
2.ssh远程登录,调用/etc/pam.d/sshd配置文件;
3.本地图形化界面,比如我用gdm,那么我在图形化登录界面时,就会调用/etc/pam.d/gdm-password配置文件。
3.2、文件内容
在RedHat 8.0之后的系统环境中,不在使用pam_tally2组件进行登录锁定策略设置,而是使用faillock组件对其登录锁定策略进行设置,如果仅仅放置在system-auth文件中,实际上就只对本地tty登录方式进行了限制,如果需要对远程登录和本地图形化界面设置登录失败锁定,则需要对password-auth文件进行参数配置。
3.2.1、/etc/pam.d/login
/etc/pam.d/login配置文件中使用substack参数引用了其他的配置文件,具体引用模块则是:system-auth
[root@RedHat8 ~]# cat /etc/pam.d/login
#%PAM-1.0
auth substack system-auth
auth include postlogin
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
session include postlogin
-session optional pam_ck_connector.so
3.2.2、/etc/pam.d/sshd
/etc/pam.d/sshd配置文件中使用substack参数引用了其他的配置文件,具体引用模块则是:password-auth
[root@RedHat8 ~]# cat /etc/pam.d/sshd
#%PAM-1.0
auth substack password-auth
auth include postlogin
account required pam_sepermit.so
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session optional pam_motd.so
session include password-auth
session include postlogin
3.2.3、/etc/pam.d/gdm-password
/etc/pam.d/gdm-password配置文件中使用substack参数引用了其他的配置文件,具体引用模块则是:password-auth
[root@RedHat8 ~]# cat /etc/pam.d/gdm-password
auth [success=done ignore=ignore default=bad] pam_selinux_permit.so
auth substack password-auth
auth optional pam_gnome_keyring.so
auth include postlogin
account required pam_nologin.so
account include password-auth
password substack password-auth
-password optional pam_gnome_keyring.so use_authtok
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
session required pam_selinux.so open
session optional pam_keyinit.so force revoke
session required pam_namespace.so
session include password-auth
session optional pam_gnome_keyring.so auto_start
session include postlogin
4、通过system-auth模块设置账户锁定策略
4.1、修改system-auth配置文件
执行命令: vi /etc/pam.d/system-auth ,将以下配置参数新增在auth字段上面:
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600 用户登录失败3次,锁定10分钟 auth sufficient pam_unix.so nullok try_first_pass 允许用户执行su权限,如果不添加该参数,则用户无法使用su进行切换 auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=300 密码验证失败后更新失败尝试记录间隔时间300秒 account required pam_faillock.so 检查账户是否因密码输错过多而被锁定,并阻止被锁定的账户登录
如图所示:
# Generated by authselect on Thu Feb 13 07:05:03 2025
# Do not modify this file manually.
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=300
account required pam_faillock.so
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth sufficient pam_fprintd.so
auth [default=1 ignore=ignore success=ok] pam_succeed_if.so uid >= 1000 quiet
auth [default=1 ignore=ignore success=ok] pam_localuser.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_sss.so forward_pass
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
4.2、登录测试
测试截图:

使用命令: faillock --user test 查看test用户锁定情况,可以看到test用户登录失败3次后,已经被锁定。

使用命令: faillock --user test --reset 解锁test用户。
解锁后,用户登录正常

5、通过password-auth模块设置账户锁定策略
5.1、修改password-auth配置文件
执行命令: vi /etc/pam.d/password-auth ,将以下配置参数新增在auth字段上面:
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600 用户登录失败3次,锁定10分钟
auth sufficient pam_unix.so nullok try_first_pass 允许用户执行su权限,如果不添加该参数,则用户无法使用su进行切换
auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=300 密码验证失败后更新失败尝试记录间隔时间300秒
account required pam_faillock.so 检查账户是否因密码输错过多而被锁定,并阻止被锁定的账户登录
如图所示:
[root@RedHat8 ~]# cat /etc/pam.d/password-auth
# Generated by authselect on Thu Feb 13 07:05:03 2025
# Do not modify this file manually.
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=300
account required pam_faillock.so
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth [default=1 ignore=ignore success=ok] pam_succeed_if.so uid >= 1000 quiet
auth [default=1 ignore=ignore success=ok] pam_localuser.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_sss.so forward_pass
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
5.2、登录测试
5.2.1、图形化界面登录测试
图形化界面3次登录失败后截图:
后台查看test用户锁定情况,使用命令: faillock --user test ,可以看到test用户登录失败3次后,已经被锁定,这时图形化登录界面即使输入正确密码也无法登录。

使用命令: faillock --user test --reset ,解锁test用户
解锁用户后,再次查询test账户锁定情况,这时锁定记录已经被清空了,代表用户可以正常登录图形化界面了。
再次进行图形化界面登录测试,这时图形化界面可以正常登录。
5.2.2、SSH远程登录测试
ssh远程登录失败3次后截图:

后台查看test用户锁定情况,使用命令: faillock ,可以看到主机192.168.5.92上的test用户登录失败3次后,已经被锁定,这时即使输入正确密码也无法登录。

使用命令: faillock --user test --reset ,解锁远程主机192.168.5.92上的test用户,再次查看远程主机用户锁定情况,这时锁定记录已经被清空了,代表远程主机可以正常登录。(测试发现,使用命令: faillock --user 192.168.5.92 --reset ,没有报错,但是针对远程主机的IP进行解锁,无效)

再次在远程主机上使用ssh进行远程登录,账户可以正常登录。

文章转载自:BK小君
原文链接:Linux用户登录失败锁定策略 - BK小君 - 博客园
体验地址:JNPF快速开发平台
1033

被折叠的 条评论
为什么被折叠?



