linux入門-mysql安全防范

近日服務(wù)器收到攻擊,數(shù)據(jù)庫被清空并插入了一個表,內(nèi)容如下:

warning bitcoin_address email
To recover your lost Database and avoid leaking it: Send us 0.1 Bitcoin (BTC) to our Bitcoin address 1J6jLduCXbPyxt5EMTs7iHwdafANy4ThJc and contact us by Email with your Server IP or Domain name and a Proof of Payment. If you are unsure if we have your data, contact us and we will send you a proof. Your Database is downloaded and backed up on our servers. Backups that we have right now: xxx,xxx,xxx . If we dont receive your payment in the next 10 Days, we will make your database public or use them otherwise. 1J6jLduCXbPyxt5EMTs7iHwdafANy4ThJc admin@yourdatabase.biz

緊急處理

造成的原因因為mysql賬號密碼被暴力破解和允許遠(yuǎn)程訪問,需要做一些緊急處理

  1. 禁用遠(yuǎn)程
    為了方便,開放允許遠(yuǎn)程連接,而且沒加ip限制,導(dǎo)致黑客有機可乘。所以我們現(xiàn)在要把一切遠(yuǎn)程連接關(guān)閉。
    本機登陸
// 服務(wù)器中國登陸數(shù)據(jù)庫
$ mysql -u 你的賬號 -p
$ 你的密碼

查看用戶
有一個特殊的數(shù)據(jù)庫,數(shù)據(jù)庫名為mysql,表名為user,它存儲了服務(wù)器數(shù)據(jù)庫有用戶信息和訪問權(quán)限。

// 選用mysql系統(tǒng)表
$ use mysql;
// 查詢?nèi)康挠脩艉蚳ost
$ select user,host form user;

host為允許訪問的主機地址,'%代表全部允許,如果發(fā)現(xiàn)host的信息為%,那這就是問題所在了,把它全刪了。

$ delete from user where host = '%';

這時候任何遠(yuǎn)程訪問都會被禁止,無法在本機外訪問了。
刷新一下緩存,讓配置生效

$ flush privileges;
  1. 刪除黑客賬號
    作為一個專業(yè)的黑客,自然會給自己留后路,比如偷偷加一個數(shù)據(jù)庫賬號,所以我們要還要查一下用戶表。
$ select user from user;

如果發(fā)現(xiàn)不認(rèn)識的賬號,一定要刪了,如只保留根角色

// 刪除一切非根用戶
$ delete from user where user != 'root';

除了這一步之外,我們還需要去db表相應(yīng)刪除

// 刪除一切非根用戶
$ delete from db where user != 'root';

同樣記得刷新緩存,讓配置生效

$ flush privileges;
  1. 修改密碼
    盡管前面已經(jīng)禁用了遠(yuǎn)程,可是密碼已經(jīng)泄露了,終究不安全,所以我們還要再去改密碼。
    還是在系統(tǒng)user表中,有一個password字段,它存儲著用戶的密碼,不過是加密后的,更新的時候需要用系統(tǒng)方法password()。這里已更新root賬號的為例
// 更新密碼
$ update user set password = password('你的新密碼');

新密碼一定要復(fù)雜,可以考慮閉著眼睛敲(記得復(fù)制出來,要不忘了)。
更新完后還是記得更新緩存(當(dāng)然可以最后再刷新緩存)。

  1. 修改端口
    mysql默認(rèn)端口是3306,黑客隨便試一下就可以發(fā)現(xiàn)了,我們應(yīng)該修改一下數(shù)據(jù)庫的端口。(盡管還可以進行端口掃描,可是猜不到也沒作用)
    首先我們在mysql環(huán)境下查詢一下當(dāng)前所用的端口是什么
$ show global variables like 'port'; 
Variable_name port
port 3306

退出mysql命令行模式。
如果我們計劃把端口改成3305,先檢查一下端口是否被占用

netstat -tunlp |grep 3305

如果沒有任何輸出那就證明沒有被占用。
緊接著我們打開mysql的配置文件,在/etc/my.cnf。
修改3306端口為一個新的端口

vim /etc/my.cnf

[mysqld]
port=3305

如果[mysqld]下沒有port參數(shù),加一個即可。
保存退出vim。

然后我們重啟mysql服務(wù)

$ systemctl restart mysqld

mysqld,不是mysql。
然后發(fā)現(xiàn)3306已經(jīng)連不上了,需要用新端口才可以。

  1. 重置數(shù)據(jù)
    信息泄露了終究不安全,不過我所泄露的信息都是一些測試數(shù)據(jù),關(guān)系不大,我重置一下就可以了。

自定義

上述操作會導(dǎo)致遠(yuǎn)程無法連接,如果又想安全又想方便,可以通過限制ip的方式,首先我們創(chuàng)建一個用戶,給該用戶分配有限的權(quán)限,然后設(shè)置一個復(fù)雜的密碼,最后加上ip限制就可以了,下面是詳細(xì)做法。

  1. 新建用戶
    使用root登錄數(shù)據(jù)庫后,進入到系統(tǒng)mysql表。假設(shè)我們創(chuàng)建zhangsan用戶,密碼是123456
$ create  user  zhangsan  identified  by  '123456';

如果創(chuàng)建成功,會默認(rèn)創(chuàng)建一個%ip限制的用戶,如果創(chuàng)建失敗,先刪除用戶再創(chuàng)建即可。

  1. 分配權(quán)限
    創(chuàng)建完zhangsan用戶后,我們還需要為其分配數(shù)據(jù)庫,處于安全考慮,一般只分配部分?jǐn)?shù)據(jù)庫,比如把ABC數(shù)據(jù)庫的全部權(quán)限都分配給zhangsan,執(zhí)行如下:
$ grant all privileges on ABC.* to zhangsan@'%' identified by '123456';

ABC.*代表ABC數(shù)據(jù)庫下的全部權(quán)限
%為默認(rèn)不限制host。

此時zhangsan用戶只能查看到ABC數(shù)據(jù)庫下的
的內(nèi)容。

  1. 限制ip
    上兩步都提到,host還是默認(rèn)的%,不加限制,我們當(dāng)然需要添加ip限制,更新一下user即可。
$ update user set host = '你的ip' where user = 'zhangsan';

此時只允許指定ip通過。

  1. 刷新緩存
    既然修改了數(shù)據(jù)庫配置,那就需要刷新使得配置生效。
$ flush privileges;

建議

針對此事項,建議做以下調(diào)整,以防范黑客攻擊:

1、服務(wù)器的管理員密碼具備一定復(fù)雜度,建議使用字母、數(shù)字、字符組合的密碼。

2、服務(wù)器關(guān)閉遠(yuǎn)程訪問(或關(guān)閉外網(wǎng)的遠(yuǎn)程訪問),調(diào)整遠(yuǎn)程訪問默認(rèn)的端口號。

3、mysql的root用戶密碼具備一定復(fù)雜度,建議使用字母、數(shù)字、字符組合的密碼。

4、mysql不允許任意遠(yuǎn)程端連接,建議僅對協(xié)同系統(tǒng)所在的IP地址放開連接。

5、mysql不使用默認(rèn)的3306端口,建議修改為其他端口。(mysql的配置文件:Windows為my.ini、Linux為my.cnf,修改其端口號)

6、mysql設(shè)置定時備份,并將數(shù)據(jù)備份包備份在異機(或異地)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 8,071評論 5 115
  • MySQL安全配置 數(shù)據(jù)庫作為數(shù)據(jù)管理的平臺,它的安全性首先由系統(tǒng)的內(nèi)部安全和網(wǎng)絡(luò)安全兩部分來決定。對于系統(tǒng)管理員...
    這是什么娃哈哈閱讀 1,584評論 0 6
  • mysqladmin -u root -p oldpass password newpass mysqladmin...
    不排版閱讀 2,365評論 0 3
  • 一、MySQL安裝 MySQL可以在redhat環(huán)境下進行RPM安裝和debian下apt安裝,但是最新的包一般都...
    零一間閱讀 3,976評論 0 4
  • 名詞延伸 通俗的說,域名就相當(dāng)于一個家庭的門牌號碼,別人通過這個號碼可以很容易的找到你。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,829評論 2 56

友情鏈接更多精彩內(nèi)容