做站长这些年,最怕的不是流量掉,而是某天早上醒来,发现服务器 CPU 跑满、SSH 连不上,或者收到云厂商发来的“您的实例存在异常外联”告警短信。很多时候,问题不是突然发生的,而是早就埋下了隐患——一个弱密码、一个没关的端口、一个忘了打补丁的组件。
这篇文章不讲虚的,直接围绕几个大家最常遇到、也最容易被忽略的安全问题,把 Linux 服务器安全检查 这件事拆成可执行的步骤。无论你用的是阿里云、腾讯云还是自己托管的物理机,这套流程都能直接用。
一、先搞清楚:你的服务器到底“健康”吗?
💡 推荐阅读:Docker 跑开发环境到底香不香?一份来自老站长的深度选型对比笔记
很多站长对服务器安全的认知停留在“我装了防火墙”或者“我密码很复杂”。但真正的安全检查,是从“看得见”开始的。下面这几个问题,如果你有三个以上答不上来,那今天的排查你最好认真跟着做一遍。
Q1:SSH 登录日志里,有没有陌生 IP 在疯狂尝试?
这是最典型的信号。很多人从来不查 /var/log/secure(CentOS)或 /var/log/auth.log(Debian/Ubuntu),结果服务器被暴力破解了几万次都不知道。
根因剖析:默认情况下,SSH 服务监听 22 端口,暴露在公网后,全球的扫描机器人会在几分钟内找上门。如果你的 root 密码强度不够,或者还在用密码登录而不是密钥,被攻破只是时间问题。
实操排查:
# 查看最近登录失败的 IP 和次数
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20
# 查看当前成功登录的用户和来源 IP
last -a | head -20
# 查看当前活跃连接
who -a
如果发现某个 IP 尝试了几千次,别犹豫,直接封掉。但封 IP 只是治标,真正的解决方案是:禁用密码登录,改用密钥认证,并修改默认 SSH 端口。
# 编辑 SSH 配置
vi /etc/ssh/sshd_config
# 修改以下参数
Port 22222 # 改成非标准端口
PermitRootLogin no # 禁止 root 直接登录
PasswordAuthentication no # 禁用密码登录
PubkeyAuthentication yes # 启用密钥登录
# 重启 SSH 服务
systemctl restart sshd
改完端口后,记得在云厂商的安全组里放行新端口,否则你自己也连不上了。这一步做完,SSH 层面的攻击面会缩小 90% 以上。
Q2:服务器 CPU 突然飙高,是不是被挖矿了?
这是另一个高频问题。某天你发现网站响应变慢,登录服务器一看 top,有个陌生进程占了 300% 的 CPU,名字还伪装成 kworker 或者 systemd 之类的系统进程。
根因剖析:挖矿木马通常通过三种途径进来:一是 SSH 弱密码被爆破,二是 Web 应用漏洞(比如 ThinkPHP 老版本 RCE),三是 Redis 未授权访问。进来之后,它会下载挖矿程序,设置定时任务,甚至修改 /etc/ld.so.preload 来隐藏自己。
实操排查:
# 查看 CPU 占用最高的进程
top -c
# 查看异常网络连接
netstat -antp | grep ESTABLISHED
# 检查定时任务(挖矿木马最爱藏的地方)
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /var/spool/cron/
# 检查是否有异常的动态链接库预加载
cat /etc/ld.so.preload
# 检查最近被修改的文件
find / -mtime -3 -type f -name "*.sh" 2>/dev/null | head -20
如果确认中了挖矿,最稳妥的做法是备份数据后重装系统。因为挖矿木马往往会留后门,你清理了一个,它可能通过另一个入口重新下载。重装后,务必按照本文的检查清单逐项加固。
Q3:网站被挂马、跳转到博彩页面,怎么查?
这种情况通常是 Web 目录被写入了恶意脚本,或者 Nginx/Apache 配置被篡改。用户访问你的网站时,会被重定向到其他页面。
根因剖析:常见原因包括:Web 应用存在文件上传漏洞、目录权限过大(比如 777)、使用了存在漏洞的 CMS 插件、或者服务器上其他站点被攻破后跨站感染。
实操排查:
# 查找最近 7 天被修改的 php/js/html 文件
find /var/www -type f \( -name "*.php" -o -name "*.js" -o -name "*.html" \) -mtime -7
# 搜索常见的恶意代码特征
grep -r "eval(" /var/www --include="*.php" | head -20
grep -r "base64_decode" /var/www --include="*.php" | head -20
grep -r "document.write" /var/www --include="*.js" | head -20
# 检查 Nginx 配置是否被篡改
cat /etc/nginx/nginx.conf | grep -i "rewrite\|proxy_pass"
发现恶意文件后,先隔离,再分析入口。同时检查 Web 目录权限,推荐设置:
# 目录 755,文件 644,属主为 Web 运行用户
chown -R www-data:www-data /var/www
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;
Q4:怎么确认服务器有没有被留后门?
这是最让人头疼的问题。很多站长清理了挖矿进程,但后门还在,过几天又被入侵。后门的形式多种多样:隐藏的 SSH 密钥、SUID 提权文件、恶意的 PAM 模块、甚至内核级别的 rootkit。
实操排查:
# 检查所有用户的 authorized_keys
for user in $(cut -f1 -d: /etc/passwd); do
echo "=== $user ==="
cat /home/$user/.ssh/authorized_keys 2>/dev/null
cat /root/.ssh/authorized_keys 2>/dev/null
done
# 查找 SUID 文件(攻击者常用来提权)
find / -perm -4000 -type f 2>/dev/null
# 检查异常用户
awk -F: '$3==0 {print $1}' /etc/passwd
# 检查系统服务是否有异常
systemctl list-units --type=service | grep -v "vendor preset"
# 使用 rkhunter 或 chkrootkit 做 rootkit 扫描
apt install rkhunter -y && rkhunter --check
如果发现可疑的 SUID 文件或陌生用户,立即删除并排查来源。对于生产环境,笔者建议定期做完整的文件完整性校验,比如用 aide 建立基线,后续任何改动都能第一时间发现。
二、一套可落地的日常安全检查清单
💡 延伸阅读:Docker 容器跑不起来?先搞懂它的运行环境,这4个坑我踩过不止一次
上面讲的是“出事了怎么查”,但更好的策略是“平时怎么防”。下面这张表是笔者自己服务器上每周执行一次的检查项,你可以直接抄作业。
| 检查项 | 命令/操作 | 频率 |
|---|---|---|
| SSH 登录日志 | grep "Failed password" /var/log/secure |
每天 |
| 异常进程与 CPU | top -c / ps aux --sort=-%cpu |
每天 |
| 监听端口 | ss -tulnp |
每周 |
| 定时任务 | crontab -l / ls /etc/cron.d/ |
每周 |
| 系统更新 | yum update 或 apt upgrade |
每周 |
| Web 目录完整性 | find /var/www -mtime -7 |
每周 |
| 用户与权限 | awk -F: '$3==0' /etc/passwd |
每月 |
三、预防建议:别等出事再补救
💡 深度技术指南:Docker 容器一跑就报错?聊聊我踩过的 4 个坑,附排查思路
安全这件事,永远是“预防成本远低于补救成本”。笔者见过太多站长,服务器被入侵后花几天时间清理,网站排名掉光,用户数据泄露,最后还得重装系统。与其这样,不如一开始就把基础打好。
- 选择靠谱的云服务器:不要贪便宜买那些来路不明的“高防服务器”或“免备案空间”,很多本身就被挂马或者超售严重。阿里云、腾讯云、华为云这些主流厂商,至少在网络层和安全组上有基本保障。如果预算有限,也要选有口碑的中型厂商,别碰三无产品。
- 域名和 SSL 证书走正规渠道:别用来路不明的免费证书,更不要买那种“永久免费”的野鸡 SSL,中间人攻击风险极高。域名注册也要选 ICANN 认证的注册商,避免被恶意劫持。
- 最小权限原则:Web 运行用户不要给 shell,数据库用户不要给 root 权限,能用密钥就不用密码,能限制 IP 就限制 IP。
- 定期备份:这是最后一道防线。备份要异地、要离线、要定期验证可恢复性。很多人的备份文件就放在同一台服务器上,结果被加密勒索后一起没了。
- 开启云厂商的安全监控:主流云平台都有“云安全中心”或“主机安全”服务,能自动检测暴力破解、挖矿、后门等异常,免费版就够用,别嫌麻烦不开。
最后说一句:Linux 服务器安全检查不是一次性的任务,而是一个持续的习惯。你不需要成为安全专家,但至少要知道“正常的样子”是什么,这样一旦出现异常,你才能第一时间察觉。希望这篇排查清单能帮你少踩几个坑,睡个安稳觉。