在實際操作中我們為了更加安全地對MySQL數據庫進行使用,我們需要對MySQL服務器進行安全的配置。因為Chroot的原因,配置文件也會有所差異,假如你在實際操作中遇到相似的情況,但是你卻不知道對其如何正確的解決,那麼以下的文章對你而言一定是良師益友。
1.關閉遠程連接
首先,應該關閉3306端口,這是MySQL的默認監聽端口。由於此處MySQL只服務於本地腳本,所以不需要遠程連接。盡管MySQL內建的安全機制很嚴格,但監聽一個TCP端口仍然是危險的行為,因為如果MySQL程序本身有問題,那麼未授權的訪問完全可以繞過MySQL的內建安全機制。關閉網絡監聽的方法很簡單,在/chroot/mysql/etc/my.cnf文件中的[mysqld]部分,去掉#skip-networking前面的“#”即可。
關閉了網絡,本地程序如何連接MySQL數據庫呢?本地程序可以通過mysql.sock來連接,速度比網絡連接更快。後文將提到關於mysql.sock的具體情況。
MySQL的備份通常使用SSH來執行。
2.禁止MySQL導入本地文件
下面將禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。這個命令會利用MySQL把本地文件讀到數據庫中,然後用戶就可以非法獲取敏感信息了。
為了禁止上述命令,在/chroot/mysql/etc/my.cnf文件的[mysqld]部分加入下面語句:
- set-variable=local-infile=0
為了管理方便,一般在系統中的MySQL管理命令如mysql、mysqladmin、mysqldump等,使用的都是系統的/etc/my.cnf文件。如果要連接,它會尋找/tmp/mysql.sock文件來試圖連接MySQL服務器,但是這裡要連接的是chroot下的MySQL服務器。解決辦法有兩個:一個是在管理命令後面加入--socket=/chroot/mysql/tmp/mysql.sock。例如:
- #/usr/local/mysql/bin/mysql -root -p --socket=/chroot/mysql/tmp/mysql.sock
另一個就是在/etc/my.cnf的[client]部分加入socket=/chroot/mysql/tmp/mysql.sock。顯然,第二種方法方便多了。
3.修改MySQL的root用戶ID和密碼
- #chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld &
- #/usr/local/mysql/bin/mysql -uroot
- .......
- mysql>SET PASSWORD FOR root@localhost=PASSWORD('new_password');
要盡量養成在mysql下輸入密碼的習慣,因為Shell下面輸入的時候可能會被其它人看見。
- mysql>use mysql;
- mysql>update user set user="wghgreat" where user="root";
- mysql>select Host,User,Password,Select_priv,Grant_priv from user;
- mysql>delete from user where user='';
- mysql>delete from user where password='';
- mysql>delete from user where host='%';
- mysql>drop database test;
修改為一個不容易猜的ID:
- mysql>flush privileges;
- mysql>quit;
4.刪除歷史命令記錄
這些歷史文件包括~/.bash_history、~/.mysql_history等。如果打開它們,你會大吃一驚,怎麼居然有一些明文的密碼在這裡?!
- #cat /dev/null > ~/.bash_history
- #cat /dev/null > ~/.mysql_history
PHP和MySQL通信
默認情況下,PHP會通過/tmp/mysql.sock來和MySQL通信,但這裡的一個大問題是MySQL生成的根本不是它,而是/chroot/mysql/tmp/mysql.sock。解決的辦法就是做一個連接:
- #ln /chroot/mysql/tmp/mysql.sock /tmp/mysql.sock
注意:由於hard links不能在文件系統的分區之間做,所以該處的連接必須位於同一分區內部。以上的相關內容就是對配置MySQL服務器的介紹,望你能有所收獲。