设置Linux服务器时, SSH安全性是重中之重。默认的SSH设置通常不足以保护Linux服务器免受外部攻击。所以,需要进行额外的调整以提供相当程度的安全性以免受暴力攻击。其中之一是实施Fail2ban以在一定次数的错误日志尝试后阻止未经授权的用户。同样,您可以利用pam_faillock模块来实施帐户锁定策略。
在本文中,小编主要介绍如何在基于RedHat发行版中尝试指定次数的SSH登录失败后锁定系统用户帐户。同时,在基于Debian的发行版上,需要使用pam_faillock模块来锁定失败的SSH登录。当然,重点是通过在连续多次SSH身份验证不成功后锁定用户帐户来实施简单的服务器安全性。
什么是pam_faillock模块?
pam_faillock模块是Linux PAM(可插入身份验证模块)的一部分,该实用程序由共享库组成,可将应用程序与标准身份验证方法分开。它接受来自sshd、gdm、login等程序的身份验证检查,并向Linux系统中的这些服务或应用程序验证用户身份。
pam_faillock模块记录每个用户的失败身份验证尝试,并在失败的身份验证尝试超过特定限制时临时锁定帐户。默认情况下,失败的登录尝试存储在每个用户文件的tally目录中,默认情况下为/var/run/faillock/。
pam_faillock模块取代了RHEL 7和RHEL 8中弃用的pam_tally和pam_tally2模块。它提供了比这两个模块更多的灵活性和选项。
SSH登录失败后如何锁定用户
可以在/etc/pam.d/system-auth和/etc/pam.d/password-auth文件中配置上述功能,方法是将以下条目添加到auth
部分。
$ sudo vim /etc/pam.d/system-auth $ sudo vim /etc/pam.d/password-auth
例如,要在3次SSH尝试失败后锁定或拒绝用户访问系统并在1200秒后解锁用户帐户,请在auth
部分中添加以下行。
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=1200 auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
其中:
audit
– 启用用户审计。deny
– 用于定义尝试次数(在本例中为3次),之后应锁定用户帐户。unlock_time
– 设置帐户应保持锁定的时间(600秒=10分钟)。
请注意,这些行的顺序非常重要,错误的配置会导致所有用户帐户被锁定。两个文件中的auth
部分应按以下顺序排列以下内容:
#%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authselect is run. auth required pam_env.so auth sufficient pam_unix.so try_first_pass nullok auth required pam_deny.so auth required pam_faillock.so preauth silent audit deny=3 unlock_time=1200 auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
接下来,导航到account
部分并在上述两个文件中添加以下行。
account required pam_faillock.so
添加以上设置后,应该是按照下图所示内容:
SSH登录失败后如何锁定root用户
可以将even_deny_root
参数添加到auth
部分以同时锁定root用户和普通用户。在此示例中,在3次SSH登录尝试失败后,普通用户的解锁时间为1200秒(20分钟),root用户的解锁时间为3600秒(60分钟或1小时)。
auth required pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=1200 auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=3600
配置完所有内容后,可以重新启动sshd等远程访问服务,以使上述策略生效,即用户是否将使用ssh连接到服务器。
$ sudo systemctl restart sshd
接下来,我们将运行测试并检查配置是否有效。
如何测试SSH用户登录尝试失败
根据以上设置,这里将系统配置为在3次身份验证尝试失败后锁定用户帐户。在这种情况下,用户tecmint
试图切换到用户 aaronkilik
,但由于密码错误导致3次错误登录后,由“Permission denied”消息指示,用户aaronkilik的帐户被锁定,如“authentication failure”消息所示第四次尝试。
与此同时,root用户也会收到系统登录尝试失败的通知,如下面的屏幕截图所示:
如何查看失败的SSH登录
可以使用faillock实用程序查看所有失败的SSH身份验证日志,该实用程序用于显示和修改身份验证失败日志。例如,可以像这样查看特定用户的失败登录尝试。
# faillock --user aaronkilik
要查看所有不成功的登录尝试,请在不带任何参数的情况下运行faillock,命令如下:
# faillock
SSH登录失败后如何解锁用户
要清除用户的认证失败日志,请运行以下命令:
# faillock --user aaronkilik --reset 或者是 # fail --reset #clears all authentication failure records
SSH登录失败后禁用用户锁定
最后,要告诉系统在多次登录尝试失败后不要锁定用户或用户帐户,请添加“auth [success=1 default=ignore] pam_succeed_if.so user in tecmint:aaronkilik”条目,就在两个文件(/etc/pam.d/system- auth和/etc/pam.d/password-auth)的auth
部分下首次调用pam_faillock的位置上方,具体如下:
#%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authselect is run. auth required pam_env.so auth sufficient pam_unix.so try_first_pass nullok auth required pam_deny.so auth [success=1 default=ignore] pam_succeed_if.so user in tecmint:aaronkilik auth required pam_faillock.so preauth silent audit deny=3 unlock_time=1200 auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
如何禁用故障锁定模块
要禁用pam_faillock模块,请执行以下命令:
# authconfig --disablefaillock --update
最后,有关详细信息,请参阅pam_faillock和faillock手册页。
# man pam_faillock # man faillock
总结
实际上,在Linux系统中,SSH登录失败后锁定和解锁用户的主要目的是增加系统的安全性。当一个用户连续多次尝试使用错误的凭据进行SSH登录时,系统可以自动锁定该用户的账户,阻止进一步的登录尝试。这种锁定机制可以有效地防止恶意用户使用暴力破解等方法尝试猜测或破解密码。
锁定用户账户有以下几个重要意义:
- 防止暴力破解:恶意用户可以使用自动化工具进行大量尝试,通过尝试不同的用户名和密码组合来破解系统。锁定用户账户可以限制他们的登录尝试次数,从而减少暴力破解的成功几率。
- 防止字典攻击:字典攻击是一种尝试使用常见密码、常见用户名或从已知数据泄漏中获取的凭据进行登录的方法。通过锁定用户账户,可以限制攻击者对大量用户账户进行字典攻击的可能性。
- 增加警觉性:当一个用户账户被锁定时,用户将无法继续登录系统,这会引起用户的注意并促使他们采取必要的行动。例如,用户可能会联系系统管理员以了解原因,并重新设置密码或采取其他安全措施来保护他们的账户。
解锁用户账户的意义在于恢复用户的正常访问权限。当管理员确认用户的身份合法,并且认为锁定已经满足了安全目的或错误地锁定了用户账户时,可以解锁用户账户以允许其继续正常登录。
需要注意的是,在锁定和解锁用户账户时,管理员应该审慎行事。过于频繁的锁定和解锁可能会对用户体验产生负面影响,并可能导致系统管理的困难。因此,Linux管理员应该根据具体情况和安全要求来制定合适的锁定策略。