账户层面要做的几件事

  1. 强密码策略
  2. 及时锁定 / 删除离职账户
  3. 禁用不需要登录的服务账户
  4. 超时退出空闲会话
  5. 限制 root 直接登录(SSH 加固另一篇细讲)

密码策略:/etc/login.defs

sudo vim /etc/login.defs

关键参数:

PASS_MAX_DAYS   90        # 密码最长有效天数
PASS_MIN_DAYS   1         # 改后多久才能再改
PASS_WARN_AGE   7         # 提前警告天数
PASS_MIN_LEN    12        # 最小长度(参考)

修改后只对新建用户生效——已存在用户用 chage

密码复杂度:libpam-pwquality

sudo apt install libpam-pwquality
sudo vim /etc/security/pwquality.conf
minlen = 12         # 最小长度
minclass = 3        # 至少 3 类字符(大写/小写/数字/符号)
maxrepeat = 3       # 同字符最多连续 3 次
maxsequence = 3     # 顺序字符如 abc 最多 3 个
gecoscheck = 1      # 不能包含用户名 / 姓名
dictcheck = 1       # 不能是字典词

测试密码:

echo "Password123" | pwscore
echo "Tr0ub4dor&3" | pwscore

chage:管单个用户的密码寿命

sudo chage -l alice
# Last password change                : May 09, 2026
# Password expires                    : Aug 07, 2026
# Password inactive                   : never
# Account expires                     : never
# Minimum number of days between password change : 1
# Maximum number of days between password change : 90
# Number of days of warning before password expires : 7

sudo chage -M 60 alice        # 改最长 60 天
sudo chage -E 2026-12-31 alice  # 账户 12/31 过期
sudo chage -d 0 alice         # 强制下次登录改密码

锁定 / 解锁账户

# 锁(用户无法登录,但保留账户)
sudo usermod -L alice            # 加 ! 到密码哈希前
sudo passwd -l alice              # 同上

# 看是否锁了
sudo passwd -S alice              # alice L 表示 locked

# 解锁
sudo usermod -U alice
sudo passwd -u alice

# 完全禁登(shell 改为 nologin)
sudo usermod -s /usr/sbin/nologin alice

看登录历史

last                          # 看登录历史
last -F                       # 显示完整时间
lastb                         # 看失败的登录尝试
lastlog                       # 每用户最后一次登录
who                           # 当前在线的人
w                             # 在线 + 在干什么

自动登出空闲会话

/etc/profile 加:

TMOUT=600          # 600 秒 = 10 分钟空闲后自动登出
readonly TMOUT
export TMOUT

只对登录 shell 生效——bash 在 idle 600 秒后自动断。

限制并发登录

/etc/security/limits.conf:

alice  hard  maxlogins  2     # alice 同时只能登 2 个会话

审计:找异常账户

# 看哪些账户能登录
grep -v 'nologin\|false' /etc/passwd | awk -F: '{print $1}'

# 找空密码账户(危险!)
sudo awk -F: '$2=="" {print $1}' /etc/shadow

# 找 UID = 0 的(应该只有 root,多了 = 后门)
awk -F: '$3==0 {print $1}' /etc/passwd

# 找未使用过的账户(lastlog 反向)
sudo lastlog | grep "Never logged in"

离职流程的工程化

# 一键脚本:锁定 + 备份家目录 + 杀进程
#!/bin/bash
user="$1"
sudo usermod -L "$user"
sudo usermod -s /usr/sbin/nologin "$user"
sudo killall -u "$user" 2>/dev/null || true
sudo tar czf "/backups/exit-$user-$(date +%F).tar.gz" "/home/$user"
echo "$user 已锁定并备份家目录"

下一篇:iptables 防火墙深入。