跳至主要內容

Linux登录失败处理策略

Cactus li2024年10月25日...大约 3 分钟Linuxpam_tally2

一、密码设置

1. 基本密码修改

$ passwd [用户名]  # 不带用户名则修改当前用户密码

2. 设置密码复杂度策略

编辑 /etc/security/pwquality.conf:

bashCopyminlen = 8          # 最小长度
minclass = 3        # 至少包含小写字母、大写字母、数字、特殊字符中的3类
maxrepeat = 3       # 最多重复3次相同字符
dcredit = -1        # 至少1个数字
ucredit = -1        # 至少1个大写字母
lcredit = -1        # 至少1个小写字母
ocredit = -1        # 至少1个特殊字符

二、登录失败处理策略

1. 服务器终端配置

编辑 /etc/pam.d/system-auth:

# 添加以下行在首行下
auth required pam_tally2.so onerr=fail deny=3 unlock_time=40 even_deny_root root_unlock_time=30
#不限制root用户
auth required pam_tally2.so deny=5 unlock_time=40 no_magic_root

参数说明:

2. SSH远程登录配置

需要同时修改两个文件:

编辑 /etc/pam.d/sshd:

# 添加以下行在首行下
auth required pam_tally2.so deny=3 unlock_time=20 even_deny_root root_unlock_time=30

编辑 /etc/pam.d/login:

# 添加以下行在首行下
auth required pam_tally2.so deny=3 unlock_time=20 even_deny_root root_unlock_time=30

3. 账户锁定管理

1. 查看账户失败登录次数

$ pam_tally2 --user=用户名

2. 解锁账户

方法1: 重置登录失败计数

$ pam_tally2 --user=用户名 --reset

方法2: 解锁用户账户

$ passwd -u 用户名

3. 手动锁定账户

$ passwd -l 用户名

三、安全建议

  1. 建议移除 root 账户的登录限制(删除 even_deny_rootroot_unlock_time 参数)
  2. 配置文件修改后立即生效,建议:
    • 保持一个 root 会话在线
    • 新开窗口测试配置
    • 确认无误后再关闭原会话
  3. 定期检查登录失败日志:
# CentOS/RHEL
$ tail -f /var/log/secure

# Ubuntu/Debian
$ tail -f /var/log/auth.log
  1. 建议同时配置 SSH 密钥登录,提高安全性

这些配置需要 root 权限,修改时要特别小心,建议先在测试环境验证配置的正确性。

四、查看用户剩余解锁时间

#!/bin/bash

# 保存为 check_unlock_time.sh
USER=$1
LOCK_TIME=40  # 你设置的锁定时间

# 获取最后失败登录的时间戳和当前时间戳
LAST_FAILURE=$(pam_tally2 --user=$USER | tail -n1 | awk '{print $4, $5}')
LAST_TS=$(date -d "$LAST_FAILURE" +%s)
NOW_TS=$(date +%s)

# 计算经过的时间和剩余时间
ELAPSED=$((NOW_TS - LAST_TS))
REMAINING=$((LOCK_TIME - ELAPSED))

# 显示状态
echo "用户: $USER"
echo "最后失败时间: $LAST_FAILURE"
if [ $ELAPSED -lt $LOCK_TIME ]; then
    echo "距离解锁还剩: $REMAINING 秒"
else
    echo "锁定时间已过,可以重新尝试登录"
fi

使用方法:

# 添加执行权限
$ chmod +x check_unlock_time.sh

# 查看指定用户的解锁时间
$ ./check_unlock_time.sh anquanyuan

更简单的方法是直接在命令行计算:

# 获取最后失败时间并计算
$ LAST=$(pam_tally2 --user=anquanyuan | tail -n1 | awk '{print $4, $5}')
$ ELAPSED=$(($(date +%s) - $(date -d "$LAST" +%s)))
$ echo "过去了 $ELAPSED 秒,还剩 $((40 - ELAPSED)) 秒解锁"
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.5.6