記一次服務器被攻擊後的經歷

該圖片由Robinraj PremchandPixabay上發佈mysql

個人小程序是在5月26號的時候上線的,運行了還沒幾天,5月30號的時候就有一個學弟告訴我說小程序用不了了,晚上回家打開電腦查看數據庫的時候才發覺大事很差!sql

WX20190605-210513@2x

個人ytools數據庫下的數據表去哪了,怎麼就剩下一個WARING了????shell

u=3304691937,3517639434&fm=26&gp=0

嚇得我趕忙百度了一下數據庫

我擦,這是被攻擊了嗎?爲何騰訊雲都沒有給我安全警報啊???小程序

不過有沒有安全警報都是次要的,最主要的事情仍是要弄清楚緣由是啥,而後想辦法補救和預防,僅以這篇文章記錄下本身被攻擊後的經歷。vim

緣由

查了一些資料發現,其實被刪庫的事件家常便飯,2016年-2017年間,就曾出現過大量MySQL數據庫被攻擊,黑客留下QQ號,並索要高額恢復費的事情,哪怕是如今這種事情也常常發生。其實總的來講仍是由於咱們在服務器安全防範方面,意識至關不夠,僥倖心理嚴重(就像到如今我也不懂我這個小屁民啥事也沒作爲啥還要搞我同樣)。如下兩種狀況的MySQL最容易被攻擊。安全

服務器密碼過於簡單的

不少人圖省事,將服務器密碼設置簡單,方便記憶與登陸,這每每給黑客留下破解空間。一旦服務器密碼被破解,那黑客將能夠直接登陸到服務器,肆意修改數據、刪除數據。針對這項,在設置密碼時,建議:使用字母、數字、字符組合的密碼,儘可能在8位10位以上。不按期更換密碼。bash

網站程序直接使用root權限

不少新手在使用數據庫時,沒有進行權限設置(或者純粹就是圖省事,項目跑起來就好了),網站程序直接鏈接root權限,一旦網站程序被破解,root帳號密碼也將被hei客獲取。MySQL涉及權限的表一共5個,最重要的權限表:user、db。user表裏除了root localhost有全部權限外,其餘 xxxx %一律沒有權限。須要開通權限要在db表裏。服務器

總之千萬不要用root以及管理員權限去運行!同時將權限限制到最小!網站

預防

下面是我查閱資料找到的一些常規的安全防範措施:

  1. 服務器的管理員密碼具有必定複雜度,建議使用字母、數字、字符組合的密碼。
  2. 服務器關閉遠程訪問(或關閉外網的遠程訪問),調整遠程訪問默認的端口號。
  3. MySQL的root用戶密碼具有必定複雜度,建議使用字母、數字、字符組合的密碼。
  4. MySQL不容許任意遠程端鏈接,建議僅對協同系統所在的IP地址放開鏈接。
  5. MySQL不使用默認的3306端口,建議修改成其餘端口。(mysql的配置文件:Linux下爲my.cnf)
  6. MySQL設置定時備份,並將數據備份包備份在異機(或異地)。
  7. 網站程序不直接使用root權限,單獨設立用戶權限。

措施

針對上述方法措施,在這給出修改過程。

環境聲明

這次實驗的環境爲:騰訊雲的Ubuntu Server 18.04,數據庫爲MySQL 5.7.25。

修改root帳戶密碼

服務器密碼的修改咱們直接去控制檯更改下就能夠了,很少說,這裏說下MySQL數據庫root密碼的更改。

  • 以root帳戶登陸MySQL
mysql -u root -p
複製代碼

而後輸入原先的root密碼進入數據庫操做(mysql shell)

  • 選擇數據庫
use mysql;
複製代碼
  • 更新root的密碼
update user set authentication_string=password('新密碼') where user='root' and host='localhost';
複製代碼

Tips:這裏說明下,在MySQL 5.7 password字段已從mysql.user表中刪除,新的字段名是authenticalion_string

  • 刷新權限
flush privileges;
複製代碼
  • 退出MySQL的shell環境並重啓MySQL服務
sudo service mysql restart
複製代碼

修改MySQL的使用端口

咱們知道MySQL的默認端口是3306,爲了安全起見,建議將MySQL的默認端口號修改爲本身想要的(有女友的就改爲女友生日,這樣就忘不掉了)。

查了不少資料說MySQL的配置文件在/etc/mysql/my.cnf路徑下,可是當我查看內容的時候卻給我下面這樣的信息:

image-20190610105106423

這個文件裏面根本沒有任何參數設置(這是因爲不一樣的mysql版本致使的,再次申明下個人系統版本爲Ubuntu18.04,MySQL 5.7.25),只看到下面兩行設置,表示導入這兩個目錄裏面的配置文件。

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
複製代碼

分別嘗試打開查看內容後咱們發現其實MySQL的相關配置都位於/etc/mysql/mysql.conf.d/mysqld.cnf裏,進入目錄後執行cat mysql.cnf能夠看到在**[mysqld]標籤下有不少參數信息,其中有一個參數就是port**,咱們把它設置成本身想要的端口號就能夠了(記得用vim時要加上sudo啊)。

最後重啓下mysql就能夠了。

sudo service mysql restart
複製代碼

關閉MySQL的遠程訪問權限

MySQL有一套權限系統,他的主要功能是證明鏈接到一臺給定主機的用戶,而且賦予該用戶在數據庫上的SELECT、INSERT、UPDATE和DELETE權限。基於安全考慮root帳戶通常只能本地訪問,可是在開發過程當中可能須要打開root的遠程訪問權限,若是正式上線的時候沒有關閉mysql的遠程訪問權限,就有可能會被利用而後刪庫。

  • 以root帳戶登陸MySQL
mysql -u root -p
複製代碼

而後輸入原先的root密碼進入數據庫操做(mysql shell)

  • 選擇數據庫
use mysql;
複製代碼
  • 關閉遠程訪問
update user set host = "localhost" where user = "root" and host= "localhost";
複製代碼
  • 刷新權限
flush privileges;
複製代碼
  • 退出MySQL的shell環境並重啓mysql服務
sudo service mysql restart
複製代碼

最後

上述內容是我本身針對這次服務器被攻擊後查閱相關資料整理出來的,由於對這方面我也不是很懂,也只能作些簡單的防禦措施,僅供參考,若是你們有什麼建議的能夠在評論區或者公衆號後臺給我留言。

相關文章
相關標籤/搜索