CentOS 服务器遭遇入侵?手把手教你精准揪出隐藏木马
上周深夜,急促的警报声响起,一位运维同行负责的电商平台CentOS服务器突发异常,CPU持续飙高,大量陌生IP疯狂连接,初步检查,一个伪装成sshd的恶意进程正悄悄将用户数据打包外传——典型的挂马后门行为,如果你也怀疑服务器被植入木马,请冷静,跟随这些经过实战验证的步骤深度排查。
第一步:文件系统完整性校验(快速发现异常变更)

核心命令:
rpm -Va- 执行:
rpm -Va | grep -E '^.M|^.....U|^......G'(聚焦权限、用户/组、MD5校验异常的变更) - 关键解读:
S.5....T c /etc/passwd:/etc/passwd的MD5值、文件大小或修改时间异常(严重警告!)..5....T c /usr/bin/sshd:关键系统二进制文件如sshd被篡改(高危!).......T c /etc/crontab:系统计划任务文件时间戳异常(可能被添加恶意任务)
- 行动: 立即隔离并备份异常文件,与官方纯净包对比 (
rpm -qf --qf="%{name}\n" /path/to/file找到所属包,rpm -qlv packagename | grep filename查看官方属性)。
- 执行:
Web目录重点扫描:
find /var/www/html -type f \( -name "*.php" -o -name "*.js" -o -name "*.ht*" \) -exec grep -l -E '(@?eval|base64_decode|shell_exec|passthru|system|phpinfo|wget|curl|fsockopen|popen)\s*\(' {} \;- 目标: 查找包含高危函数(eval, base64解码、命令执行等)的文件,尤其关注最近修改的文件 (
find ... -mtime -3)。
第二步:进程与网络深度分析(揪出活跃威胁)
动态进程排查:
top -c -o %CPU/htop:按CPU或内存排序,识别资源占用异常的陌生进程名或路径。ps auxfww:查看详细进程树,留意隐藏的父进程(如异常httpd子进程)。ls -alh /proc/<PID>/exe:检查可疑进程的真实执行文件路径(木马常伪装或指向/tmp、/dev/shm)。
网络连接透视:
netstat -tulnp或ss -tulnp:列出所有监听端口及关联进程,警惕非标准端口(如6666, 2333)上的/bin/sh、perl、python等。lsof -i -P -n:查看所有网络连接及打开文件的进程。iftop/nethogs:实时监控带宽占用,定位异常外连IP(特别是连接境外未知地址)。
第三步:系统日志与审计(追溯入侵痕迹)

关键日志源:
/var/log/secure:SSH登录记录,查找:grep 'Failed password'(爆破记录)、grep 'Accepted password'(成功登录,核对IP和用户)、grep -i invalid(无效用户尝试)。/var/log/messages//var/log/syslog:核心系统日志,关注CRON异常任务、服务启停、内核警告。/var/log/audit/audit.log(若启用auditd):详细记录文件访问、命令执行、系统调用,是溯源利器(需提前配置规则)。- Web日志 (
/var/log/httpd/access_log,/var/log/nginx/access.log):搜索异常URL(如包含/wp-admin、/console的非WordPress站点)、SQL注入特征码、大量404扫描、单IP高频请求。
登录历史检查:
last/lastb:查看成功/失败登录历史,注意异常时间或来源IP。grep ':0' /etc/securetty:检查是否允许root直接登录控制台(应禁用)。
第四步:自动化扫描与Rootkit检测(应对高级隐匿)
Rootkit猎人:
chkrootkit:安装后运行chkrootkit,检查常见rootkit、后门特征。注意: 需定期更新,存在误报可能。rkhunter:yum install rkhunter rkhunter --propupd # 更新特征数据库 rkhunter -c --sk # 执行检查 (--sk 自动按回车)
仔细阅读报告,重点关注
Warning项(如文件属性变更、隐藏文件、可疑字符串)。
恶意文件扫描:

ClamAV:安装 (yum install clamav clamav-update),更新病毒库 (freshclam),扫描关键目录 (clamscan -r -i /var/www /bin /usr/bin /etc)。
第五步:权限与定时任务审查(阻断持久化)
SUID/SGID文件:
find / -perm -4000 -type f -exec ls -ld {} \; 2>/dev/null(SUID)find / -perm -2000 -type f -exec ls -ld {} \; 2>/dev/null(SGID)- 检查列表,移除非关键程序(如
/bin/cat、/usr/bin/find)的SUID/SGID位 (chmod u-s /path/file)。
定时任务陷阱:
crontab -l:检查当前用户任务。ls -la /etc/cron*:系统级任务目录(/etc/cron.hourly,/etc/cron.daily,/etc/cron.d/)。grep -r 'curl\|wget\|bash\|sh\|perl\|python\|php' /etc/cron* /var/spool/cron:查找可能下载执行恶意脚本的任务。
第六步:加固与持续防护(亡羊补牢,犹未为晚)
- 隔离断网: 确认入侵后立即断开服务器网络。
- 备份取证:关键! 完整备份系统盘、日志、异常文件(用于后续分析/法律程序)。
- 彻底清除:
- 基于排查结果,删除确认的恶意文件、进程、定时任务、用户账号。
- 修复篡改的系统文件(从官方源重装对应rpm包)。
- 重置所有用户密码(尤其是root、数据库、应用管理员)。
- 全面加固:
- 最小权限原则: Web应用使用非特权用户运行,严格限制目录权限。
- SSH强化: 禁用root登录 (
PermitRootLogin no),改用密钥认证,更改端口。 - 防火墙严控:
firewalld/iptables仅开放必需端口,限制来源IP。 - 及时更新:
yum update --security定期修补漏洞。 - 文件监控: 部署
auditd或aide监控关键目录变化。 - 入侵检测: 考虑
OSSEC、Suricata等方案。
面对服务器安全威胁,侥幸心理是最大风险,一次成功的入侵往往源于未修复的漏洞、弱密码或松懈的配置,定期执行安全扫描、严格审计日志、保持系统更新,这些看似繁琐的工作构筑了防御的基石,安全并非一劳永逸,而是运维人员与潜在攻击者之间持续的对抗,每一次成功的防御,都建立在对系统深度理解和严谨操作之上。
