mysql max_allowed_packet自動重置為1024 終結解決

来源:http://www.cnblogs.com/qdpurple/archive/2016/08/05/5742059.html
-Advertisement-
Play Games

背景: 測試環境1台centOS機器,最近一段頻繁報“ ”, 記錄解決問題的思路,最終找到問題根源:黑客入侵,總結經驗。 思路: 查看max_allowed_packet : show global VARIABLES like '%max_allowed_packet%'; (註意:mysql 系 ...


 

  • 背景:

測試環境1台centOS機器,最近一段頻繁報“

Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1354 > 1024). You can change this value on the server by setting the max_allowed_packet' variable

”, 記錄解決問題的思路,最終找到問題根源:黑客入侵,總結經驗。

 

  • 思路:

查看max_allowed_packet :

show global VARIABLES like '%max_allowed_packet%'; (註意:mysql 系統參數分為session和global 之分, session只當前連接生效,global 全局連接生效)

1).通過mysql客戶端,set global max_allowed_packet = 2*1024*1024*10;  (修改後,重啟資料庫會恢復為預設)

2). 修改my.cnf  在[mysqld]段或者mysql的server配置段進行修改。(終極修改, 修改後重啟資料庫,永久生效)

  如下: max_allowed_packet = 20M 通過方法2修改完成後,通過客戶端生效。 但發現,過一段時間(有時幾個小時,有時1~2天),自動變為1024。 思考:google 發現有說被黑客攻擊,本來不相信,因為是內網環境。無奈出現情況,越來越頻繁,剛更改後,過一會就變為1024。以下帖子給了啟發: http://stackoverflow.com/questions/28979660/why-mysql-max-allowed-packet-reset-to-1m-automatically mysql 有general_log, 會記錄所有執行的sql命令,因為耗費性能,預設是關閉。
mysql> show variables like '%log%';
+-----------------------------------------+---------------------------------+
| Variable_name                           | Value                           |
+-----------------------------------------+---------------------------------+
| back_log                                | 50                              |
| binlog_cache_size                       | 32768                           |
| binlog_direct_non_transactional_updates | OFF                             |
| binlog_format                           | STATEMENT                       |
| expire_logs_days                        | 0                               |
| general_log                             | OFF                             |
| general_log_file                        | /var/run/mysqld/mysqld.log      |

打開general_log:

mysql> set global general_log = ON;

查看general_log:

tail -f /var/run/mysqld/mysqld.log |grep max_allowed_packet (查看log,但列印大量實時sql操作)

tail -f /var/run/mysqld/mysqld.log |grep max_allowed_packet >1.txt (過濾max_allowed_packet,並輸出到文件1.txt)

果然發現,有以下修改:

 

160804  8:59:41      172 Query    SET GLOBAL max_allowed_packet=1024
          172 Query    SET GLOBAL max_allowed_packet=1024
          173 Query    SET GLOBAL max_allowed_packet=1024
160804  8:59:49      173 Query    SET GLOBAL max_allowed_packet=1024

172 Query SET GLOBAL max_allowed_packet=1024 

瞭解到general_log 日誌中,172 為用戶連接Id(mysql 會對每一個連接分配唯一id),在全量general log中過濾id為172的操作如下:

 (很遺憾,由於機器被攻擊,總監要求對機器進行系統還原,在寫日誌時,log被刪除了),大概如下:

 connect root@someipaddress on
   Query select 0x4D5A900..........(verylong)
   Query select sys_exe('cmd /c  c:/windows/nbvqc4.vbs')
   .........
   set global max_allowed_packet 1024
   ........

 從登陸ip 查詢到時美國的一個IP, 操作主要有:從某一網站,下載腳本,並執行;打開mysql相關安全參數,設置相關變數。

至此,非常確定mysql 資料庫被黑客攻擊了。

  • 疑問:

1. mysql部署在內網,外網如何訪問?

  原來,之前便其它合作伙伴提供外網測試環境,讓網管把外網IP,影射到了此機器。導致通過公網IP直接訪問到了此台機器。

驗證:

  1). 通過外網IP, 使用mysql客戶端,可以直接連接到mysql服務。

   2). 通過外網IP, 使用xshell 登陸成功。

2.  黑客怎麼知道了用戶名/密碼?

由於是測試機器,mysql使用了簡單了密碼(root/123456) ,  被猜到,破解太容易了。

3. 防火牆呢?

  由於開啟防火牆,在系統測試時,出現各種麻煩。就關閉了。service iptables status;

[root@bo bryant]# service iptables status;
iptables: Firewall is not running.
[root@bo bryant]# 

4. 黑客是怎麼發現漏洞的,為什麼入侵目的?

猜測大概流程: 通過掃描軟體掃描公網ip, 測試到機器埠未關閉,如22,3306(應對1: 開啟防火牆,只開放服務埠,禁用其它埠外網訪問),嘗試暴力密碼登陸(應對策略2: 複雜密碼策略,可建立白名單,對於多次連接失敗,進行日誌記錄和預警)。通過日誌發現了,黑客主要操作為:在mysql中調用了系統命令(下載遠程文件,增加執行許可權,並執行),打開相關安全參數。

查看機器登陸歷史及登陸失敗歷史,發現近段時間,有大量外網登陸失敗情況,如下圖中oracle, svn ,apache 用戶,黑客通過常用應用的用戶名/密碼在不停的嘗試登陸系統:

producti ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
producti ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
swsoft   ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
swsoft   ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
iraf     ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
iraf     ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
svn      ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
svn      ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
oracle   ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
oracle   ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
root     ssh:notty    217.76.78.35     Mon Aug  1 10:49 - 10:49  (00:00)    
lab      ssh:notty    217.76.78.35     Mon Aug  1 10:48 - 10:48  (00:00)    
lab      ssh:notty    217.76.78.35     Mon Aug  1 10:48 - 10:48  (00:00)    
root     ssh:notty    217.76.78.35     Mon Aug  1 10:48 - 10:48  (00:00)    
root     ssh:notty    217.76.78.35     Mon Aug  1 10:48 - 10:48  (00:00)    
apache   ssh:notty    217.76.78.35     Mon Aug  1 10:48 - 10:48  (00:00)    
apache   ssh:notty    217.76.78.35     Mon Aug  1 10:48 - 10:48  (00:00)    
root     ssh:notty    217.76.78.35     Mon Aug  1 10:48 - 10:48  (00:00)    
root     ssh:notty    217.76.78.35     Mon Aug  1 10:48 - 10:48  (00:00)    
root     ssh:notty    217.76.78.35     Mon Aug  1 10:48 - 10:48  (00:00)    

 

5. 黑客為什麼要修改 max_allowed_packet 1024 ?

修改了max_allowed_packet =1024,將導致所有數據操作,如果返回結果>1024,將報錯。 修改此參數,很容易讓用戶發現數據問題,推測是駭客是故意暴露自己,也許只為了炫耀一下。

  • 總結:

1. 再次證明在遇到複雜技術問題google 比百度要靠譜多

2. 日誌分析是解決問題的必須途徑

3. 增加信息安全意識,原來黑客離我們並不遠,如果不是故意暴露自己,我們也不會發現此機器被黑,黑客控制此機器後,可以輕易使用此機器,進行相關非法活動。

 

具體:

1. 外網機器,一定要開啟防火牆,只開放提供服務埠,禁用其它埠。 制定相關安全策略,如記錄登陸用戶ip,定期查看登陸用戶歷史及登陸失敗記錄,對於反覆登陸能拒絕登陸。

2. 系統用戶名,應該根據需要確定是否使用root用戶,具體業務最好使用普通用戶許可權。因為root用戶,擁有系統系統的全部許可權。

3.密碼:用戶密碼一定不要使用簡單密碼,最好使用密碼生成器生成負責密碼(大小寫,特殊字元,長度)

4. 數據安全:

mysql應該給不同業務創建不同用戶,並賦予有限功能許可權,禁止root 用戶做業務操作。

 

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ``` / 倒計時 @param endTime 截止的時間戳 @return 返回的剩餘時間 / (NSString )remainingTimeMethodAction:(long long)endTime { //得到當前時間 NSDate nowData = [NSDate date]; N ...
  • 本篇是對HBase官方參考文檔的大體翻譯,介於本人英文水平實在有限,難免有紕漏之處。本篇不只是對官方文檔的翻譯,還加入了一些本人對HBase的理解。在翻譯過程中,一些沒有營養的廢話,我就忽略了沒有翻譯。本篇按照 2016年 5、6 月 最新版的 http://hbase.apache.org/boo ...
  • 一資料庫伺服器執行shutdown immediate時,遇到了下麵ORA錯誤,如下所示: $ sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - Production on Fri Aug 5 10:56:24 2016 Copyright (c)... ...
  • 問題:使用某大腿寫的遠程工具管理Mysql資料庫時發現所有數據能正常顯示,但是無法進行刪除、修改等操作。 思路:可以遠程讀取到資料庫里的信息,說明當前主機可以遠程連接資料庫。卻無法進行刪除、修改這些操作,說明某些許可權並未賦予當前遠程用戶。 解決方法: 查看當前用戶許可權 顯示當前用戶下的許可權為:sel ...
  • 跟蹤標記:1117 功能: 預設,同一個文件組下的多個文件,如果某個文件沒有可用空間,且設置了自動增長,則該文件自動增長,其他文件大小保持不變; 開啟後,同一文件組下的多個文件,如果某個文件沒有可用空間,且設置了自動增長,文件組下所有文件同時增長,每個文件漲幅取決於自身filegrowth設置; 用 ...
  • 持久化概念 持久化是將程式數據在持久狀態和瞬時狀態間轉換的機制。通俗的講,就是瞬時數據(比如記憶體中的數據,是不能永久保存的)持久化為持久數據(比如持久化至資料庫中,能夠長久保存)。 Redis持久化 官方說明:http://www.redis.io/topics/persistence 持久化方式 ...
  • 從MySQL5.5開始,MySQL以插件的形式支持半同步複製。如何理解半同步呢?首先我們來看看非同步,全同步的概念 非同步複製(Asynchronous replication) MySQL預設的複製即是非同步的,主庫在執行完客戶端提交的事務後會立即將結果返給給客戶端,並不關心從庫是否已經接收並處理,這樣 ...
  • 博主不想寫字並向你仍來了一堆代碼 1-6 SQL——結構化查詢語言,Structured Query Language; 基本按列查詢: 高級一點的過濾查詢,WHERE,ORDER,IN,NOT,AND,OR,BETWEEN,NULL: 通配符,%,_,[](實測MySQL我這裡不支持。。。) 不要 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...