CentOS系统中postgres异常进程占满CPU且自动重启求助
兄弟,这种情况我碰到过好几次,十有八九是postgres用户被恶意程序(大概率是挖矿脚本)缠上了——毕竟正常PostgreSQL没启动,还自动重启、占满CPU,进程名还奇怪,完全符合恶意程序的特征。给你一套一步步排查解决的方案,亲测有效:
排查与解决步骤
1. 先揪出进程的“真面目”
别被奇怪的进程名骗了,先拿到它的真实信息:
- 先找到进程PID:执行
ps -ef | grep postgres,排除掉grep本身的进程,剩下的就是那个占CPU的进程(比如PID是1234) - 查看进程的实际执行文件路径:
ls -l /proc/1234/exe,恶意程序常改进程名,这个软链接能直接指向它的真身 - 查看进程的启动命令行:
cat /proc/1234/cmdline,有时候能看到它的下载地址、脚本参数这类关键信息
2. 找到自动重启的根源
杀了就重启,肯定有守护机制在后台盯着,逐个排查:
- 检查systemd服务:执行
systemctl list-unit-files | grep -i postgres,找那些不是postgresql.service的陌生服务。如果找到,直接停止并禁用:systemctl stop 恶意服务名 && systemctl disable 恶意服务名 - 检查定时任务:
- 看postgres用户的个人定时任务:
crontab -u postgres -l - 检查系统级定时任务:
cat /etc/crontab,还有/etc/cron.d/、/var/spool/cron/目录下的文件,发现陌生的定时执行命令直接删掉
- 看postgres用户的个人定时任务:
- 检查启动脚本:看看
/etc/rc.local、postgres用户家目录(默认/var/lib/pgsql)下的.bashrc、.profile这类自动执行的脚本,有没有陌生的启动语句,有的话删掉
3. 彻底清除恶意程序
- 先临时冻结进程,防止边杀边重启:
kill -STOP 1234 - 根据第一步找到的执行文件路径,删除恶意程序:比如
rm -f /tmp/xxx_miner(注意核对路径,别删错系统文件) - 再彻底杀死进程:
kill -9 1234 - 清理postgres用户家目录的可疑文件:
ls -la /var/lib/pgsql,检查隐藏文件,发现陌生脚本、二进制文件直接删除
4. 加固postgres用户权限,防止再次中招
- 检查sudo权限:执行
visudo,看看有没有给postgres不必要的sudo权限,恶意程序常利用这个提权,没用的权限直接删掉 - 禁止postgres用户交互式登录(如果不需要的话):
usermod -s /sbin/nologin postgres,切断恶意程序的交互式shell入口 - 检查系统新增用户:执行
cat /etc/passwd,看看有没有陌生的新用户,有的话直接删除:userdel 陌生用户名
5. 事后溯源与加固
- 查看系统日志找入侵痕迹:
tail -n 100 /var/log/messages、tail -n 100 /var/log/secure,看看是不是SSH暴力破解、漏洞利用进来的 - 安装
fail2ban防止SSH暴力破解,定期更新系统补丁:yum update -y,堵住可能的漏洞
内容的提问来源于stack exchange,提问作者Nicolás Pascual
相关产品推荐
相关产品推荐

