Linux用户登录失败锁定策略

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

 1 [root@RedHat8 ~]# cat /etc/pam.d/login  2 #%PAM-1.0  3 auth       substack     system-auth  4 auth       include      postlogin  5 account    required     pam_nologin.so  6 account    include      system-auth  7 password   include      system-auth  8 # pam_selinux.so close should be the first session rule  9 session    required     pam_selinux.so close 10 session    required     pam_loginuid.so 11 session    optional     pam_console.so 12 # pam_selinux.so open should only be followed by sessions to be executed in the user context 13 session    required     pam_selinux.so open 14 session    required     pam_namespace.so 15 session    optional     pam_keyinit.so force revoke 16 session    include      system-auth 17 session    include      postlogin 18 -session   optional     pam_ck_connector.so

3.2.2、/etc/pam.d/sshd

  /etc/pam.d/sshd配置文件中使用substack参数引用了其他的配置文件,具体引用模块则是:password-auth

 1 [root@RedHat8 ~]# cat /etc/pam.d/sshd  2 #%PAM-1.0  3 auth       substack     password-auth  4 auth       include      postlogin  5 account    required     pam_sepermit.so  6 account    required     pam_nologin.so  7 account    include      password-auth  8 password   include      password-auth  9 # pam_selinux.so close should be the first session rule 10 session    required     pam_selinux.so close 11 session    required     pam_loginuid.so 12 # pam_selinux.so open should only be followed by sessions to be executed in the user context 13 session    required     pam_selinux.so open env_params 14 session    required     pam_namespace.so 15 session    optional     pam_keyinit.so force revoke 16 session    optional     pam_motd.so 17 session    include      password-auth 18 session    include      postlogin

 3.2.3、/etc/pam.d/gdm-password

  /etc/pam.d/gdm-password配置文件中使用substack参数引用了其他的配置文件,具体引用模块则是:password-auth

 1 [root@RedHat8 ~]# cat /etc/pam.d/gdm-password  2 auth     [success=done ignore=ignore default=bad] pam_selinux_permit.so  3 auth        substack      password-auth  4 auth        optional      pam_gnome_keyring.so  5 auth        include       postlogin  6   7 account     required      pam_nologin.so  8 account     include       password-auth  9  10 password    substack       password-auth 11 -password   optional       pam_gnome_keyring.so use_authtok 12  13 session     required      pam_selinux.so close 14 session     required      pam_loginuid.so 15 session     optional      pam_console.so 16 session     required      pam_selinux.so open 17 session     optional      pam_keyinit.so force revoke 18 session     required      pam_namespace.so 19 session     include       password-auth 20 session     optional      pam_gnome_keyring.so auto_start 21 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                                  检查账户是否因密码输错过多而被锁定,并阻止被锁定的账户登录

  如图所示:

 1 # Generated by authselect on Thu Feb 13 07:05:03 2025  2 # Do not modify this file manually.  3   4 auth        required                                     pam_faillock.so preauth silent audit deny=3 unlock_time=600  5 auth        sufficient                                   pam_unix.so nullok try_first_pass  6 auth        [default=die]                                pam_faillock.so authfail audit deny=3 unlock_time=300  7 account     required                                     pam_faillock.so  8   9 auth        required                                     pam_env.so 10 auth        required                                     pam_faildelay.so delay=2000000 11 auth        sufficient                                   pam_fprintd.so 12 auth        [default=1 ignore=ignore success=ok]         pam_succeed_if.so uid >= 1000 quiet 13 auth        [default=1 ignore=ignore success=ok]         pam_localuser.so 14 auth        sufficient                                   pam_unix.so nullok try_first_pass 15 auth        requisite                                    pam_succeed_if.so uid >= 1000 quiet_success 16 auth        sufficient                                   pam_sss.so forward_pass 17 auth        required                                     pam_deny.so 18  19 account     required                                     pam_unix.so 20 account     sufficient                                   pam_localuser.so 21 account     sufficient                                   pam_succeed_if.so uid < 1000 quiet 22 account     [default=bad success=ok user_unknown=ignore] pam_sss.so 23 account     required                                     pam_permit.so 24  25 password    requisite                                    pam_pwquality.so try_first_pass local_users_only 26 password    sufficient                                   pam_unix.so sha512 shadow nullok try_first_pass use_authtok 27 password    sufficient                                   pam_sss.so use_authtok 28 password    required                                     pam_deny.so 29  30 session     optional                                     pam_keyinit.so revoke 31 session     required                                     pam_limits.so 32 -session    optional                                     pam_systemd.so 33 session     [success=1 default=ignore]                   pam_succeed_if.so service in crond quiet use_uid 34 session     required                                     pam_unix.so 35 session     optional                                     pam_sss.so

4.2、登录测试

  测试截图:

  Linux用户登录失败锁定策略

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

  Linux用户登录失败锁定策略

  使用命令: faillock --user test --reset 解锁test用户。

  解锁后,用户登录正常

  Linux用户登录失败锁定策略

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                           检查账户是否因密码输错过多而被锁定,并阻止被锁定的账户登录

  如图所示:

 1 [root@RedHat8 ~]# cat /etc/pam.d/password-auth  2 # Generated by authselect on Thu Feb 13 07:05:03 2025  3 # Do not modify this file manually.  4   5 auth        required                                     pam_faillock.so preauth silent audit deny=3 unlock_time=600  6 auth        sufficient                                   pam_unix.so nullok try_first_pass  7 auth        [default=die]                                pam_faillock.so authfail audit deny=3 unlock_time=300  8 account     required                                     pam_faillock.so  9  10 auth        required                                     pam_env.so 11 auth        required                                     pam_faildelay.so delay=2000000 12 auth        [default=1 ignore=ignore success=ok]         pam_succeed_if.so uid >= 1000 quiet 13 auth        [default=1 ignore=ignore success=ok]         pam_localuser.so 14 auth        sufficient                                   pam_unix.so nullok try_first_pass 15 auth        requisite                                    pam_succeed_if.so uid >= 1000 quiet_success 16 auth        sufficient                                   pam_sss.so forward_pass 17 auth        required                                     pam_deny.so 18  19 account     required                                     pam_unix.so 20 account     sufficient                                   pam_localuser.so 21 account     sufficient                                   pam_succeed_if.so uid < 1000 quiet 22 account     [default=bad success=ok user_unknown=ignore] pam_sss.so 23 account     required                                     pam_permit.so 24  25 password    requisite                                    pam_pwquality.so try_first_pass local_users_only 26 password    sufficient                                   pam_unix.so sha512 shadow nullok try_first_pass use_authtok 27 password    sufficient                                   pam_sss.so use_authtok 28 password    required                                     pam_deny.so 29  30 session     optional                                     pam_keyinit.so revoke 31 session     required                                     pam_limits.so 32 -session    optional                                     pam_systemd.so 33 session     [success=1 default=ignore]                   pam_succeed_if.so service in crond quiet use_uid 34 session     required                                     pam_unix.so 35 session     optional                                     pam_sss.so

5.2、登录测试

5.2.1、图形化界面登录测试

  图形化界面3次登录失败后截图:

Linux用户登录失败锁定策略

  后台查看test用户锁定情况,使用命令: faillock --user test ,可以看到test用户登录失败3次后,已经被锁定,这时图形化登录界面即使输入正确密码也无法登录。

Linux用户登录失败锁定策略

  使用命令: faillock --user test --reset ,解锁test用户

  解锁用户后,再次查询test账户锁定情况,这时锁定记录已经被清空了,代表用户可以正常登录图形化界面了。

Linux用户登录失败锁定策略

   再次进行图形化界面登录测试,这时图形化界面可以正常登录。

Linux用户登录失败锁定策略

 5.2.2、SSH远程登录测试

  ssh远程登录失败3次后截图:

Linux用户登录失败锁定策略

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

Linux用户登录失败锁定策略

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

Linux用户登录失败锁定策略

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

Linux用户登录失败锁定策略

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

发表评论

评论已关闭。

相关文章