昨天有臺測試服務器被告知服務異常,進服務器以後才發現是由於docker 異常退出了。web
將docker 運行起來以後,發現有個不認識的進程 kdevtmpfsi
佔用CPU 異常的多,Google 一下才知道,好傢伙,服務器被當成礦機了。docker
直接 kill 並不能將其結束掉,它還有守護進程及可能存在的定時任務。服務器
$ find / -name kinsing // 守護進程 $ find / -name kdevtmpfsi // 挖礦進程
若是Redis 是運行在本地,上面兩個文件一般是在/tmp/
目錄下。測試
若是Redis 是以容器的方式運行,則一般是在/var/lib/docker/overlay2/
(容器的 /tmp/
目錄)下。spa
$ rm -f kinsing kdevtmpfsi
這裏被感染的容器也不必定是Redis ,好比個人則是PHP,因此須要進入到被感染的容器內才能找到。日誌
$ ps -aux | grep kinsing $ ps -aux | grep kdevtmpfsi $ kill -9 pid
$ crontab -l
存在定時任務的不必定是當前用戶,能夠使用如下命令查找其餘用戶是否存在任務:code
$ for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done
定時任務還可能存在於如下地方:blog
/etc/crontab
/var/spool/cron/
/var/spool/cron/crontabs/
至此就完成了病毒的清理,網上千篇一概的全是這種處理方式,但這個方式並不適合我,我嘗試了不少次,不管我怎麼刪除,病毒仍是存在。進程
由於病毒是依賴於容器生存的,因而我便將容器中止掉,經過docker logs
實時查看容器最後10條日誌:crontab
docker logs -f -t --tail 10 <容器id/容器名稱>
十分鐘以後,總算讓我逮到了:
雖然目擊了全過程,但這時我依然無能爲力,由於我不知道上面那些命令是如何自動啓動的。
嘗試了各類方式,但都無解,十分鐘以後病毒仍是會出來,最終我只能把這個被感染的容器給棄用了,從新起一個新的容器。
kdevtmpfsi
病毒的產生,一般是由於Redis 對外開放 6379
端口,且沒設置密碼或者密碼過於簡單致使。
因此服務器必定要設置好防火牆,像3306
、6379
這種經常使用端口,儘可能減小對外開放的機會。