账户层面要做的几件事
- 强密码策略
- 及时锁定 / 删除离职账户
- 禁用不需要登录的服务账户
- 超时退出空闲会话
- 限制 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 防火墙深入。