一、账户登录失败锁定
1. 加固说明
为防止遭受恶意暴力破解,设置账户登录尝试次数并进行锁定,有效保护账户的安全。
2. 加固准备
/etc/pam.d/common-auth
文件是Linux系统中PAM(Pluggable Authentication Modules,可插拔认证模块)认证系统的一个重要配置文件。该文件主要用于定义系统中应用程序或服务的身份验证配置,因此账户锁定策略可以通过修改此配置文件实现。配置文件中包含了多个模块及其参数,这些模块和参数共同决定了系统如何验证用户的身份。以下是一些常见的模块及其参数解读:
- pam_unix.so模块
pam_unix.so是PAM中最常用的模块之一,它用于基于本地/etc/passwd和/etc/shadow文件的身份验证。
常用参数:
nullok:允许空密码。
nullok_secure:则禁止通过远程登录的方式进行无密码登录,但可以在本地无密码登录。
try_first_pass:尝试使用先前模块(如pam_unix.so用于密码更改时)提供的密码,而不是提示用户输入新密码。
use_first_pass:类似于try_first_pass,但如果先前模块没有提供密码,则不会提示 用户。
unlock_time:这个参数指定了账号被锁定后的恢复时间,即账号锁定的时长。当账号被锁定后,用户需要等待这个时长过后才能再次尝试登录。这个参数的值通常以秒为单位,例如unlock_time=600表示账号锁定时间为10分钟。
root_unlock_time:仅针对root用户单独设置的解锁时间。
pwquality:检查新密码是否符合管理员定义的策略要求。如果密码不符合要求,系统将拒绝接受该密码,并可能向用户提供有关密码策略的反馈。
- pam_deny.so模块
pam_deny.so模块总是拒绝身份验证请求。它通常用于测试或禁用某个服务。
常用参数:
无特殊参数,通常仅用于拒绝所有身份验证请求。
- pam_permit.so模块
pam_permit.so模块总是允许身份验证请求。与pam_deny.so相反,它通常用于测试目的。
常用参数:
无特殊参数,通常仅用于允许所有身份验证请求。
- pam_cracklib.so模块
pam_cracklib.so用于检查新密码的复杂度。此模块在V10系统中已被pam_pwquality.so替代,并且/etc/security/pwquality.conf配置文件的优先级高于/etc/pam.d/common-auth。
常用参数:
minlen:密码的最小长度。
dcredit:要求密码中包含的小写字母的最小数量。
ucredit:要求密码中包含的大写字母的最小数量。
lcredit:要求密码中包含的数字的最小数量。
ocredit:要求密码中包含的其他字符(如特殊符号)的最小数量。
- pam_faillock.so模块
pam_faillock.so模块通过配置文件中指定的参数来控制账号锁定的行为。
常用参数:
deny:这个参数用于指定锁定账号的失败次数阈值。当用户的连续认证失败次数达到这个阈值时,账号将被锁定。例如,deny=3表示当用户连续3次输入错误的密码后,账号将被锁定。
unlock_time:这个参数指定了账号被锁定后的恢复时间,即账号锁定的时长。当账号被锁定后,用户需要等待这个时长过后才能再次尝试登录。这个参数的值通常以秒为单位,例如unlock_time=600表示账号锁定时间为10分钟。
fail_interval:这个参数用于指定两个认证失败事件之间的最小间隔时间。在此间隔时间内,认证失败次数不会被计数。这有助于防止因为短时间内多次尝试登录而导致的账号被误锁。例如,fail_interval=900表示两次认证失败事件之间的最小间隔为15分钟。
fail_delay:这个参数指定了认证失败后的延迟时间。在认证失败后,系统会等待这个时长后再进行下一次认证尝试。这有助于防止暴力破解攻击。
even_deny_root:root 账户登录达到失败次数也会锁定。
audit:用于控制是否将认证失败的事件记录到系统审计日志中,以便后续分析和审计。
- 控制标志
在/etc/pam.d/common-auth文件中,除了模块和参数外,还有一些控制标志,它们决定了身份验证的流程。
常用模块:
required:该模块必须成功,否则整个认证流程将失败,但其他后续模块仍会尝试。
requisite:类似于required,但如果该模块失败,整个认证流程将立即失败,不会尝试其他后续模块。
sufficient:如果该模块成功,则整个认证流程成功,不会尝试其他后续模块。
optional:该模块是可选的,其成功或失败不会影响整个认证流程。
3. 加固建议
编辑/etc/pam.d/common-auth文件,使用pam_faillock.so模块配置相应参数实现账户登录失败锁定。
在V10桌面系统中默认的账户登录失败锁定参数如下(连续错误三次锁定60秒):
auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass deny=3 unlock_time=60 root_unlock_time=60 pwquality
以连续失败5次、普通用户锁定时间为180秒、root锁定时间为60秒为例,可以按照如下参数修改:
auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass deny=5 unlock_time=180 root_unlock_time=60 pwquality
4. 操作示范
编辑配置文件:sudo vim /etc/pam.d/common-auth
默认参数配置:
修改后参数配置:
5. 配置验证
test用户锁定验证:
图形化登录界面显示剩余锁定时间:
注意:此时图形界面不接受输入密码,如果字符终端再继续输入错误的密码,会重新锁定3分钟。
解锁后字符终端切换test用户,登录成功:su - test
解锁后图形化登录成功:
root用户锁定验证:
解锁后字符终端切换root用户,登录成功:su - root