在Linux中实现安全的密码策略涉及到多个方面,主要包括设置密码复杂度规则、密码过期策略、密码历史限制以及尝试失败后的账户锁定等。以下是实现这些策略的详细步骤和方法:
1. 修改/etc/login.defs
配置文件
/etc/login.defs
文件是控制用户密码和其他账户属性的主要配置文件。你可以在这里设置密码的最小长度、密码过期时间、密码历史等。
- 设置密码最小长度:
PASS_MIN_LEN 12
- 这里设置密码最小长度为12个字符。
- 密码过期时间:
PASS_MAX_DAYS 90
- 设置密码最大使用天数为90天,之后用户必须更改密码。
- 密码过期警告天数:
PASS_WARN_AGE 7
- 用户在密码过期前7天开始收到警告。
- 密码历史:
ENCRYPT_METHOD SHA512 PASSWORD_HISTORY 5
- 设置使用SHA512加密算法,并限制用户不能重复使用最近5次的密码。
2. 使用PAM模块增强密码复杂度
安装并配置pam_cracklib.so
模块,以强制执行密码复杂度规则。
- 安装模块(如果尚未安装):
在Debian、Ubuntu或Linux Mint上:
sudo apt-get install libpam-cracklib
- 在CentOS、Fedora上:
sudo yum install pam_cracklib
- 编辑PAM配置文件(通常在
/etc/pam.d/system-auth
或/etc/pam.d/common-password
):
添加或修改以下行来启用复杂度检查:
password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
- 这里,
minlen=12
指定了密码最小长度,difok=3
表示新密码至少有3个字符不同于旧密码,其余选项限制了字母、数字、特殊字符的使用。
3. 防止密码猜测攻击
使用pam_tally2.so
模块来限制密码尝试次数并锁定账户。
- 编辑PAM配置文件(如
/etc/pam.d/sshd
或/etc/pam.d/common-auth
):
添加以下行以在失败尝试后锁定账户:
auth required pam_tally2.so deny=5 unlock_time=1800
- 这里,
deny=5
表示在账户被锁定前允许的失败登录尝试次数为5次,unlock_time=1800
设置锁定时间为30分钟。
4. 测试与应用
- 重启服务:对于某些服务,如SSH,可能需要重启才能应用新的PAM配置。
sudo systemctl restart sshd
- 测试策略:尝试创建或更改密码,验证新的策略是否生效。
综上所述,你可以显著提升Linux系统中密码的安全性,减少因弱密码或密码攻击而导致的安全风险。记得在实施任何策略更改后进行充分的测试,确保系统的正常运行。