服务器账户安全基线检查是围绕身份可信、权限可控、行为可溯的动态验证机制,涵盖账户全生命周期管理:通过awk筛选普通用户并核验归属,lastlog标记90天未登录账户,/etc/shadow与shell配置确认禁用状态,禁用root等高危默认账户;验证PAM密码复杂度与faillock锁定策略实效性,强制SSH密钥认证;审查sudo无限制权限、危险命令授权及关键目录权限;启用HISTTIMEFORMAT、auditd监控账户变更,并将日志转发至中心审计平台。

服务器账户安全基线检查不是简单地“看看有没有多余账号”,而是围绕身份可信、权限可控、行为可溯三个核心,对账户全生命周期做系统性验证。
账户状态与身份唯一性检查
重点确认每个登录入口是否具备明确归属和最小必要性。
- 运行
awk -F: '$3 >= 1000 && $3 筛出普通用户,人工核对是否全部为真实业务或运维人员; - 对比
lastlog -b 90输出,标记连续90天未登录的账户,评估是否需禁用或删除; - 检查
/etc/shadow中密码字段为*或!的账户(如sync、shutdown),确认其 shell 是否设为/sbin/nologin,避免被提权利用; - 禁用所有默认高危账户:
passwd -l root(禁用root本地登录)、passwd -l operator、passwd -l games等非必要系统账户。
认证强度与失败响应机制
验证密码策略是否真正生效,而非仅配置了参数。
- 查看
/etc/pam.d/system-auth是否包含pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1类似配置,确保长度、大小写、数字、特殊字符强制要求; - 检查
/etc/pam.d/sshd是否启用登录失败锁定:应有auth [default=die] pam_faillock.so authfail deny=6 unlock_time=900; - 验证实际效果:用测试账户连续输错6次密码后,再尝试正确密码,确认是否被拒绝并提示“account locked”;
- 确保 SSH 服务禁用密码登录(
PasswordAuthentication no),只允许密钥认证,避免暴力破解绕过PAM策略。
权限分配与提权路径审查
账户本身安全只是起点,关键要看它能做什么。
- 执行
grep 'ALL=(ALL)' /etc/sudoers /etc/sudoers.d/* 2>/dev/null | grep -v '^#',识别所有无限制sudo权限账户,逐个评估必要性; - 检查
sudo -l -U <username></username>输出,确认普通用户是否被授予了危险命令(如NOPASSWD: /bin/bash,/usr/bin/find); - 审查
/etc/group中wheel、sudo组成员,剔除非授权人员; - 确认关键目录(如
/etc/shadow,/root)权限不被普通用户读写:ls -l /etc/shadow /root应显示-rw-------和dr-x------。
审计与持续监控落地项
账户安全不能只靠一次检查,必须留下可回溯痕迹。
- 启用 bash 命令历史时间戳:在
/etc/profile中添加export HISTTIMEFORMAT="%Y-%m-%d %T ",并确保HISTSIZE=10000、HISTFILESIZE=20000; - 配置
auditd监控敏感账户操作:在/etc/audit/rules.d/account.rules中加入-w /etc/passwd -p wa -k account_change、-w /etc/shadow -p wa -k password_change; - 每日检查
ausearch -m USER_AUTH -ts today | grep "failed",确认失败登录告警是否正常捕获; - 将账户变更日志(如
useradd、usermod)写入独立日志文件,并通过rsyslog转发至中心审计平台,防止本地篡改。
账户安全基线不是静态清单,而是一套动态验证机制。每次新增人员、调整权限、升级系统后,都应触发一次快速复检。真正有效的加固,是让攻击者连第一个有效账户都找不到。

















