You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中PostgreSQL容器数据库自动删除问题排查求助

PostgreSQL容器数据丢失原因分析与解决方案

问题原因

从日志可以明确判断,你的PostgreSQL容器遭遇了未授权恶意访问与攻击,具体攻击痕迹如下:

  • 攻击者执行带shell命令的COPY语句尝试收集系统信息:
    COPY "public"."temp_rmywwamavt" FROM PROGRAM E'if [ "$(stat -c/tmp/.sh_history) -gt 10485760 ]; then echo > /tmp/.sh_history && echo llkkmm; fi 2>&1 || exit 0' WITH DELIMITER '~';
    
    同时尝试读取敏感文件/tmp/.sh_history,属于典型的信息收集行为。
  • 攻击者试图移除超级用户权限,阻止管理员后续操作:
    ALTER USER "postgres" WITH NOSUPERUSER;ALTER USER "pgg_superadmins" WITH NOSUPERUSER
    
  • 最后尝试删除核心数据库:
    DROP DATABASE postgres;
    
    这条命令因数据库处于打开状态失败,但攻击者大概率已执行删除表数据的操作,这正是数据丢失的直接原因。

攻击成功的潜在诱因:

  • PostgreSQL容器直接暴露在公网,且pg_hba.conf配置为host all all all scram-sha-256,允许任意IP访问。
  • postgres用户密码过于简单或已泄露,导致攻击者通过密码认证登录。

解决方案

紧急处理

  1. 立即停止受攻击容器,防止进一步破坏:
    docker stop <容器名称/ID>
    
  2. 备份当前容器数据卷(若使用挂载卷),避免数据损坏:
    docker run --rm -v <你的数据卷名称>:/data -v $(pwd):/backup ubuntu tar czf /backup/postgres-backup.tar.gz /data
    

数据恢复

  • 若有定期备份,直接用pg_restore或备份文件将数据恢复到新的安全容器中。
  • 若无备份,启动临时PostgreSQL容器挂载现有数据卷,检查剩余数据是否可导出。

安全漏洞修复

  1. 严格访问控制:
    修改pg_hba.conf,仅允许可信IP段访问,例如仅开放内部服务网段:
    host all all 192.168.0.0/24 scram-sha-256
    
    禁止使用all all all的宽松配置。
  2. 设置强密码:
    为postgres用户配置复杂密码,避免弱密码或默认密码。
  3. 避免公网直接暴露:
    不要将PostgreSQL容器端口直接映射到公网,使用反向代理或防火墙策略,仅允许可信来源访问。
  4. 定期自动备份:
    配置每日备份任务,例如:
    pg_dump -U postgres <目标数据库名> > /backup/$(date +%Y%m%d)-backup.sql
    

后续排查

  • 检查容器连接日志,定位攻击来源IP,必要时在防火墙中封禁该IP。
  • 排查应用程序是否存在数据库密码泄露情况,如代码硬编码、配置文件权限不当等。

内容的提问来源于stack exchange,提问作者ubiroliv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:24:56