如何對MySQL服務(wù)器進(jìn)行安全的配置?
在實(shí)際操作中我們?yōu)榱烁影踩貙?a >MySQL數(shù)據(jù)庫進(jìn)行使用,我們需要對MySQL服務(wù)器進(jìn)行安全的配置。因?yàn)镃hroot的原因,配置文件也會有所差異,假如你在實(shí)際操作中遇到相似的情況,但是你卻不知道對其如何正確的解決,那么以下的文章對你而言一定是良師益友。
1.關(guān)閉遠(yuǎn)程連接
首先,應(yīng)該關(guān)閉3306端口,這是MySQL的默認(rèn)監(jiān)聽端口。由于此處MySQL只服務(wù)于本地腳本,所以不需要遠(yuǎn)程連接。盡管MySQL內(nèi)建的安全機(jī)制很嚴(yán)格,但監(jiān)聽一個(gè)TCP端口仍然是危險(xiǎn)的行為,因?yàn)槿绻鸐ySQL程序本身有問題,那么未授權(quán)的訪問完全可以繞過MySQL的內(nèi)建安全機(jī)制。關(guān)閉網(wǎng)絡(luò)監(jiān)聽的方法很簡單,在/chroot/mysql/etc/my.cnf文件中的[mysqld]部分,去掉#skip-networking前面的“#”即可。
關(guān)閉了網(wǎng)絡(luò),本地程序如何連接MySQL數(shù)據(jù)庫呢?本地程序可以通過mysql.sock來連接,速度比網(wǎng)絡(luò)連接更快。后文將提到關(guān)于mysql.sock的具體情況。
MySQL的備份通常使用SSH來執(zhí)行。
2.禁止MySQL導(dǎo)入本地文件
下面將禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。這個(gè)命令會利用MySQL把本地文件讀到數(shù)據(jù)庫中,然后用戶就可以非法獲取敏感信息了。
為了禁止上述命令,在/chroot/mysql/etc/my.cnf文件的[mysqld]部分加入下面語句:
- set-variable=local-infile=0
為了管理方便,一般在系統(tǒng)中的MySQL管理命令如mysql、mysqladmin、mysqldump等,使用的都是系統(tǒng)的/etc/my.cnf文件。如果要連接,它會尋找/tmp/mysql.sock文件來試圖連接MySQL服務(wù)器,但是這里要連接的是chroot下的MySQL服務(wù)器。解決辦法有兩個(gè):一個(gè)是在管理命令后面加入--socket=/chroot/mysql/tmp/mysql.sock。例如:
- #/usr/local/mysql/bin/mysql -root -p --socket=/chroot/mysql/tmp/mysql.sock
另一個(gè)就是在/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');
要盡量養(yǎng)成在mysql下輸入密碼的習(xí)慣,因?yàn)镾hell下面輸入的時(shí)候可能會被其它人看見。
- 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;
修改為一個(gè)不容易猜的ID:
- mysql>flush privileges;
- mysql>quit;
4.刪除歷史命令記錄
這些歷史文件包括~/.bash_history、~/.mysql_history等。如果打開它們,你會大吃一驚,怎么居然有一些明文的密碼在這里?!
- #cat /dev/null > ~/.bash_history
- #cat /dev/null > ~/.mysql_history
PHP和MySQL通信
默認(rèn)情況下,PHP會通過/tmp/mysql.sock來和MySQL通信,但這里的一個(gè)大問題是MySQL生成的根本不是它,而是/chroot/mysql/tmp/mysql.sock。解決的辦法就是做一個(gè)連接:
- #ln /chroot/mysql/tmp/mysql.sock /tmp/mysql.sock
注意:由于hard links不能在文件系統(tǒng)的分區(qū)之間做,所以該處的連接必須位于同一分區(qū)內(nèi)部。以上的相關(guān)內(nèi)容就是對配置MySQL服務(wù)器的介紹,望你能有所收獲。
【編輯推薦】
- Python如何對MySQL存儲過程進(jìn)行調(diào)用?
- MySQL數(shù)據(jù)庫權(quán)限設(shè)置的實(shí)際運(yùn)行過程
- MySQL 觸發(fā)器insert 的3個(gè)示例演示
- 用linux安裝MySQL時(shí)產(chǎn)生問題破解
- MySQL數(shù)據(jù)庫中的字符串