服务器安全巡检清单:新手必做的6项检查
无论你的服务器跑的是网站、数据库还是其他业务,安全巡检都应该成为每月甚至每周的固定动作。
很多问题都是从小隐患开始的——弱密码、多余端口、过时的软件包。
这篇文章专门面向零基础用户,准备了6个可直接执行的检查项,每项都附带了命令和验证方法。
开始前请确保你已经通过 SSH 登录到服务器,并且有 sudo 权限。
检查前要确认的两件事
- SSH 连接正常:用终端工具(如 Xshell、Termius、终端)连上服务器。
- 有 sudo 权限:大部分检查命令需要权限才能获取完整信息。如果不确定,先在命令行输入
whoami确认当前用户,再尝试sudo -v测试权限。
第1项:检查系统上有哪些用户
先列出系统中所有拥有登录权限的用户,确认没有可疑账号。
awk -F: '($7 != "/usr/sbin/nologin" && $7 != "/bin/false") {print $1}' /etc/passwd
这个命令会输出所有能登录系统的用户名。
正常服务器通常只有 root 和你自己创建的普通用户。
如果看到陌生用户名,比如 test、admin 等,要立刻检查它的创建时间和最近登录记录。
验证方式:运行完看到的结果不超过 5 个用户,且每个用户你都认识。
第2项:找出所有在 Listen 的端口
对外暴露的端口越多,被攻击的面就越大。
你需要知道当前服务器开了哪些端口。
sudo ss -tlnp
重点看 State 为 LISTEN 的行,以及 Local Address:Port 里的端口号。
常见端口如 22 (SSH)、80 (HTTP)、443 (HTTPS) 属于正常,但如果出现了 3306 (MySQL)、6379 (Redis)、8080 之类的端口,确认下是不是业务需要。
如果看到像 4444、31337 这类可疑端口,立刻查对应进程。
验证方式:记录下所有在监听的端口,和业务确认是否都必要。
第3项:检查正在运行的服务和进程
使用以下命令列出所有正在运行的服务,看看有没有异常。
sudo systemctl list-units --type=service --state=running
输出中每一行代表一个正在运行的服务。
正常的服务因业务而异,但如果你看到 smtp、nfs、rpcbind 之类不需要的服务,建议用 sudo systemctl stop <服务名> 立即停用并禁用:sudo systemctl disable <服务名>。
验证方式:确认运行的服务只有你认识的那些。
第4项:查看最近的登录记录和失败尝试
登录日志是安全巡检的“监控录像”。
last -10 # 查看最近10次登录记录
sudo lastb -10 # 查看最近10次失败登录(需要sudo)
正常情况 last 输出的 IP 和用户应该是你自己。
如果出现大量来自陌生 IP 的失败记录(lastb 显示),说明有人正在尝试爆破 SSH。
这时必须加强 SSH 安全:关闭密码登录、使用密钥对、修改端口或者安装 fail2ban。
验证方式:last 结果中只有你自己的登录信息。
第5项:检查文件和目录权限
重点检查系统关键文件是否被修改过权限。
最危险的场景是 /etc/shadow 和 /etc/passwd 变成了可写。
ls -l /etc/passwd /etc/shadow /etc/ssh/sshd_config
正常权限:/etc/passwd 是 -rw-r--r--,/etc/shadow 是 -rw-r-----,/etc/ssh/sshd_config 是 -rw-r--r--。
如果看到任何文件权限包含 w 且所有者不是你或 root,需要立刻修复。
验证方式:三个文件权限与上面描述一致。
第6项:检查系统更新和安全补丁
过时的软件包里往往藏着已知漏洞。
定期更新是成本最低的安全防护。
sudo apt update && sudo apt list --upgradable # Debian/Ubuntu
# 或者 CentOS/Fedora: sudo dnf check-update
查看列表中有没有标记为 security 的更新。
如果有,建议立即执行升级命令:sudo apt upgrade -y(Debian系)或 sudo dnf upgrade(RedHat系)。
升级前最好确认业务兼容性。
验证方式:再次运行 sudo apt list --upgradable 返回空,表示所有包已最新。
避坑指南:新手最容易忽略的5个细节
- 不要直接使用 root 操作:日常运维用普通用户加 sudo,降低误操作风险。
- 检查完不要立刻关闭会话:先测试业务是否正常运行,比如访问网站、数据库连接等。
- 日志文件很大时:使用
journalctl -n 50只查看最近 50 行日志,避免等待。 - 关闭端口后要确认防火墙规则:比如用
sudo ufw status查看防火墙是否也阻止了对应端口。 - 更新前一定要备份:关键数据例如数据库,先打快照或全量备份。
效果验证:你的服务器安全吗?
完成以上 6 项检查后,你可以问自己三个问题:
- 我能说出服务器上每个活跃用户和每个监听端口的用途吗?
- 最近的登录记录里没有可疑 IP 吗?
- 系统的安全更新已经全部应用了吗?
如果答案都是肯定的,那么你的服务器安全处于较健康的状态。
建议将这套流程做成脚本或定时任务,每周自动执行一次,并且将结果通过邮件或监控系统发送给你。
常见问题解答
问:检查完后发现有陌生用户怎么办? 答:立即用 sudo userdel -r 用户名 删除该用户,然后检查其家目录下有没有残留文件,并修改 root 密码和 SSH 密钥。
问:开放端口过多,但不确定哪些是业务需要的? 答:先在服务器上临时停掉对应服务,然后观察业务是否受影响。如果线上业务不可用,重新启动并记录服务用途。
问:更新系统会不会导致网站无法访问? 答:有极小概率发生依赖冲突。建议先在测试环境验证,或者更新前用 sudo apt upgrade --dry-run 查看将要更新的包列表,确认不包含核心运行时组件(如 PHP、Nginx 等)的大版本升级。
问:日志里有很多失败登录怎么办? 答:立刻修改 SSH 端口(编辑 /etc/ssh/sshd_config 中的 Port 字段),然后 sudo systemctl restart sshd;同时安装 fail2ban 自动封禁频繁失败的 IP。
通过这 6 项检查,你已经完成了服务器安全巡检中最核心的步骤。
建议把命令记下来或保存为脚本,养成定期执行的习惯。
安全不是一次性动作,而是持续的过程。