熱點推薦:
您现在的位置: 電腦知識網 >> 安全防毒 >> 正文

教您如何安全的應用 MySQL的方法

2022-06-13   來源: 安全防毒 

  MySQL已經成為當前網絡中使用最多的數據庫之一特別是在Web應用上它占據了中小型應用的絕對優勢這一切都源於它的小巧易用安全有效開放式許可和多平台更主要的是它與三大Web語言之一——PHP的完美結合
  
  但不幸的是一個缺省安全的MySQL會因為root密碼為空及程序漏洞導致被溢出使得安裝MySQL的服務器成為被經常攻擊的對象更嚴重的是被攻擊之後數據庫往往遭破壞易造成災難性的後果下面將進入為了保護數據而進行的保衛戰中
  
  環境要求
  .系統環境
  
  有一台Red Hat Linux 自定義安裝的服務器系統安裝了GCC及一些軟件包比如ApachePHP等安裝完系統後的第一件事就是升級系統的軟件包作為Web服務器系統接受PHP腳本的請求PHP則使用下面將要安裝的MySQL數據庫作為動態發布的接觸
  
  分區情況的要求和一般系統差不多惟一不同之處在於後面建立的/chroot與/tmp要求在同一個分區上
  
  .安全要求
  
  ()MySQL運行在一個獨立的(Chroot)環境下
  
  ()mysqld進程運行於一個獨立的用戶/用戶組下此用戶和用戶組沒有根目錄沒有Shell也不能用於其它程序
  
  ()修改MySQL的root賬號並使用一個復雜的密碼
  
  ()只允許本地連接MySQL啟動MySQL時網絡連接被禁止掉
  
  ()保證連接MySQL的nobody賬號登錄被禁止
  
  ()刪除test數據庫
  
  安裝MySQL
  .安裝准備
  
  安裝MySQL之前按照上述安全要求需要創建一個用於啟動MySQL的用戶和組
  
  #groupadd mysql
  
  #useradd mysql c start mysqlds account d /dev/null g mysql s /sbin/nologin
  
  .編譯和安裝
  
  下載MySQL源代碼包:
  
  #wget /mysqltargz
  
  解壓縮:
  
  #tar zxvf mysqltargz
  
  一般把MySQL安裝在/usr/local/mysql下如果有特殊要求也可自行調整不過這樣做意義不大因為後面將Chrooting到時只是使用這裡的客戶工具而已比如mysqlmysqladminmysqldump等下面就開始編譯安裝吧
  
  #/configure prefix=/usr/local/mysql
  withmysqlduser=mysql
  withunixsocketpath=/tmp/mysqlsock
  withmysqldldflags=allstatic
  
  #make && make install
  
  #strip /usr/local/mysql/libexec/mysqld
  
  #scripts/mysql_install_db
  
  #chown R root /usr/local/mysql
  
  #chown R mysql /usr/local/mysql/var
  
  #chgrp R mysql /usr/local/mysql
  
  上面各步驟的具體作用在MySQL手冊裡已有介紹惟一需要解釋和一般步驟不同的地方在於withmysqldldflags=allstatic因為需要用到Chroot環境而MySQL本身連接成靜態後就無需再創建一些庫環境了
  
  .配置與啟動
  
  MySQL的配置文件需要手工選擇拷貝幾個模板文件中的一個到/etc下這幾個模板文件位於源文件的supportfiles目錄一共有smallmediumlargehuge
  
  #cp supportfiles/f /etc/f
  
  #chown root:sys /etc/f
  
  #chmod /etc/f
  
  啟動MySQL注意使用用戶為mysql
  
  #/usr/local/mysq/bin/mysqld_safe user=mysql &
  
  .測試
  
  為了測試安裝的程序是否正確及MySQL是否已經正常啟動最好的辦法就是用MySQL客戶端來連接數據庫
  
  #/usr/local/mysql/bin/mysql
  
  [root@ftp bin]# mysql
  
  Welcome to the MySQL monitor Commands end with ; or \g
  
  Your MySQL connection id is to server version:
  
  Type help; or \h for help Type \c to clear the buffer
  
  mysql>
  
  mysql> show databases;
  
  ++
  
  Database
  
  ++
  
  mysql
  
  test
  
  ++
  
   rows in set ( sec)
  
  mysql>quit
  
  連接成功可以關閉數據庫
  
  #/usr/local/mysql/bin/mysqladmin uroot shutdown
  
  如果連接失敗則需要仔細分析出錯原因
  
  #more /usr/local/mysql/var/`hostname`err
  
  Chrooting
  
  .Chrooting環境
  
  Chroot是Unix/類Unix的一種手段它的建立會將其與主系統幾乎完全隔離也就是說一旦遭到什麼問題也不會危及到正在運行的主系統這是一個非常有效的辦法特別是在配置網絡服務程序的時候
  
  .Chroot的准備工作
  
  首先應當建立如圖示目錄結構
  
  #mkdir p /chroot/mysql/dev
  
  #mkdir p /chroot/mysql/etc
  
  #mkdir p /chroot/mysql/tmp
  
  #mkdir p /chroot/mysql/var/tmp
  
  #mkdir p /chroot/mysql/usr/local/mysql/libexec
  
  #mkdir p /chroot/mysql/usr/local/mysql/share/mysql/english
  
  );
  然後設定目錄權限
  
  #chown R root:sys /chroot/mysql
  
  #chmod R /chroot/mysql
  
  #chmod /chroot/mysql/tmp
  
  .拷貝mysql下的程序和文件到chroot下
  
  #cp p /usr/local/mysql/libexec/mysqld /chroot/mysql/usr/local/mysql/libexec/
  
  #cp p /usr/local/mysql/share/mysql/english/errmsgsys
  
  /chroot/mysql/usr/local/mysql/share/mysql/english/
  
  #cp p /etc/hosts /chroot/mysql/etc/
  
  #cp p /etc/nf /chroot/mysql/etc/
  
  #cp p /etc/nf /chroot/mysql/etc/
  
  #cp p /etc/group /chroot/mysql/etc/
  
  #cp p /etc/passwd /chroot/mysql/etc/passwd
  
  #cp p /etc/f /chroot/mysql/etc/
  
  .編輯chroot下的passwd文件和group文件
  
  #vi /chroot/etc/passwd
  
  如上命令打開passwd文件請刪除除了mysqlrootsys的所有行
  
  #vi /chroot/etc/group
  
  如上命令打開group文件請刪除除了mysqlroot的所有行
  
  .創建特殊的設備文件/dev/null
  
  參照系統的樣子做即可
  
  #ls al /dev/null
  
  crwrwrw root root Jan /dev/null
  
  #mknod /chroot/mysql/dev/null c
  
  #chown root:root /chroot/mysql/dev/null
  
  #chmod /chroot/mysql/dev/null
  
  .拷貝mysql的數據庫文件到chroot下
  
  #cp R /usr/local/mysql/var/ /chroot/mysql/usr/local/mysql/var
  
  #chown R mysql:mysql /chroot/mysql/usr/local/mysql/var
  
  .安裝chrootuid程序
  
  下載chrootuid然後RPM安裝即可
  
  /stat//idpl//com/chrootuidl
  
  .測試Chroot環境下的MySQL配置
  
  #chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld &
  
  如果失敗請注意chroot目錄下面的權限問題
  
  .測試連接chroot下的MySQL
  
  #/usr/local/mysql/bin/mysql socket=/chroot/mysql/tmp/mysqlsock
  
  
  
  mysql>show databases;
  
  mysql>create database wgh;
  
  mysql>quit;
  
  #ls al /chroot/mysql/var/
  
  
  
  配置服務器
  為了更加安全地使用MySQL需要對MySQL的數據庫進行安全配置由於Chroot的原因配置文件也會有所不同
  
  .關閉遠程連接
  
  首先應該關閉端口這是MySQL的默認監聽端口由於此處MySQL只服務於本地腳本所以不需要遠程連接盡管MySQL內建的安全機制很嚴格但監聽一個TCP端口仍然是危險的行為因為如果MySQL程序本身有問題那麼未授權的訪問完全可以繞過MySQL的內建安全機制關閉網絡監聽的方法很簡單在/chroot/mysql/etc/f文件中的[mysqld]部分去掉#skipnetworking前面的#即可
  
  關閉了網絡本地程序如何連接MySQL數據庫呢?本地程序可以通過mysqlsock來連接速度比網絡連接更快後文將提到關於mysqlsock的具體情況
  
  MySQL的備份通常使用SSH來執行
  
  .禁止MySQL導入本地文件
  
  下面將禁止MySQL中用LOAD DATA LOCAL INFILE命令這個命令會利用MySQL把本地文件讀到數據庫中然後用戶就可以非法獲取敏感信息了
  
  為了禁止上述命令在/chroot/mysql/etc/f文件的[mysqld]部分加入下面語句
  
  setvariable=localinfile=

From:http://tw.wingwit.com/Article/Security/201401/30214.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.