自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

LAMP安全加固之mysql篇

運維 系統(tǒng)運維
正在使用和準備使用LAMP的人,都想為自己的LAMP安全有實質(zhì)般的改變,那就隨我看看實質(zhì)性的加強LAMP安全的辦法。 在前面的文章我給大家介紹了LAMP安全的Apache和PHP,輪到最后一個了:mysql

 

LAMP 

圖-LAMP

大家在用LAMP時,LAMP安全問題揪心,但是問題已在我前面?zhèn)z篇文章中介紹到了,現(xiàn)在來介紹下LAMP安全最后一個:mysql

  mysql方面:

  1.修改root用戶口令,刪除空口令

  缺省安裝的MySQL的root用戶是空密碼的,為了安全起見,必須修改為強密碼,所謂的強密碼,至少8位,由字母、數(shù)字和符號組成的不規(guī)律密碼。使用MySQL自帶的命令mysaladmin修改root密碼,同時也可以登陸數(shù)據(jù)庫,修改數(shù)據(jù)庫mysql下的user表的字段內(nèi)容,修改方法如下所示:

  # /usr/local/mysql/bin/mysqladmin -u root password “upassword” //使用mysqladmin

  #mysql> use mysql;

  #mysql> update user set password=password(‘upassword’) where user=’root’;

  #mysql> flush privileges; //強制刷新內(nèi)存授權(quán)表,否則用的還是在內(nèi)存緩沖的口令

  2.刪除默認數(shù)據(jù)庫和數(shù)據(jù)庫用戶

  一般情況下,MySQL數(shù)據(jù)庫安裝在本地,并且也只需要本地的php腳本對mysql進行讀取,所以很多用戶不需要,尤其是默認安裝的用戶。MySQL初始化后會自動生成空用戶和test庫,進行安裝的測試,這會對數(shù)據(jù)庫的安全構(gòu)成威脅,有必要全部刪除,最后的狀態(tài)只保留單個root即可,當(dāng)然以后根據(jù)需要增加用戶和數(shù)據(jù)庫。

  #mysql> show databases;

  #mysql> drop database test; //刪除數(shù)據(jù)庫test

  #use mysql;

  #delete from db; //刪除存放數(shù)據(jù)庫的表信息,因為還沒有數(shù)據(jù)庫信息。

  #mysql> delete from user where not (user=’root’) ; // 刪除初始非#p#root的用戶

  #mysql> delete from user where user=’root’ and password=”; //刪除空密碼的root,盡量重復(fù)操作

  Query OK, 2 rows affected (0.00 sec)

  #mysql> flush privileges; //強制刷新內(nèi)存授權(quán)表。

  3.改變默認mysql管理員帳號

  4.關(guān)于密碼的管理

  密碼是數(shù)據(jù)庫安全管理的一個很重要因素,不要將純文本密碼保存到數(shù)據(jù)庫中。如果你的計算機有安全危險,入侵者可以獲得所有的密碼并使用它們。相反,應(yīng)使用 MD5()、SHA1()或單向哈希函數(shù)。也不要從詞典中選擇密碼,有專門的程序可以破解它們,請選用至少八位,由字母、數(shù)字和符號組成的強密碼。在存取密碼時,使用mysql的內(nèi)置函數(shù)password()的sql語句,對密碼進行加密后存儲。例如以下方式在users表中加入新用戶。

  #mysql> insert into users values (1,password(1234),’test’);

#p#

  5.使用獨立用戶運行msyql

  絕對不要作為使用root用戶運行MySQL服務(wù)器。這樣做非常危險,因為任何具有FILE權(quán)限的用戶能夠用root創(chuàng)建文件(例如,~root/.bashrc)。mysqld拒絕使用root運行,除非使用–user=root選項明顯指定。應(yīng)該用普通非特權(quán)用戶運行 mysqld。正如前面的安裝過程一樣,為數(shù)據(jù)庫建立獨立的linux中的mysql賬戶,該賬戶用來只用于管理和運行MySQL。

  要想用其它Unix用戶啟動mysqld,,增加user選項指定/etc/my.cnf選項文件或服務(wù)器數(shù)據(jù)目錄的my.cnf選項文件中的[mysqld]組的用戶名。

  #vi /etc/my.cnf

  [mysqld]

  user=mysql

  該命令使服務(wù)器用指定的用戶來啟動,無論你手動啟動或通過mysqld_safe或mysql.server啟動,都能確保使用mysql的身份。也可以在啟動數(shù)據(jù)庫是,加上user參數(shù)。

  # /usr/local/mysql/bin/mysqld_safe –user=mysql &

  作為其它linux用戶而不用root運行mysqld,你不需要更改user表中的root用戶名,因為MySQL賬戶的用戶名與linux賬戶的用戶名無關(guān)。確保mysqld運行時,只使用對數(shù)據(jù)庫目錄具有讀或?qū)憴?quán)限的linux用戶來運行。

  6.禁止遠程連接數(shù)據(jù)庫

  在命令行netstat -ant下看到,默認的3306端口是打開的,此時打開了mysqld的網(wǎng)絡(luò)監(jiān)聽,允許用戶遠程通過帳號密碼連接數(shù)本地據(jù)庫,默認情況是允許遠程連接數(shù)據(jù)的。為了禁止該功能,啟動skip-networking,不監(jiān)聽sql的任何TCP/IP的連接,切斷遠程訪問的權(quán)利,保證安全性。假如需要遠程管理數(shù)據(jù)庫,可通過安裝PhpMyadmin來實現(xiàn)。假如確實需要遠程連接數(shù)據(jù)庫,至少修改默認的監(jiān)聽端口,同時添加防火墻規(guī)則,只允許可信任的網(wǎng)絡(luò)的 mysql監(jiān)聽端口的數(shù)據(jù)通過。

  # vi /etc/my.cf

  將#skip-networking注釋去掉。

  # /usr/local/mysql/bin/mysqladmin -u root -p shutdown //停止數(shù)據(jù)庫

  #/usr/local/mysql/bin/mysqld_safe –user=mysql & //后臺用mysql用戶啟動mysql

  7.限制連接用戶的數(shù)量

  數(shù)據(jù)庫的某用戶多次遠程連接,會導(dǎo)致性能的下降和影響其他用戶的操作,有必要對其進行限制??梢酝ㄟ^限制單個賬戶允許的連接數(shù)量來實現(xiàn),設(shè)置my.cnf 文件的mysqld中的max_user_connections變量來完成。GRANT語句也可以支持資源控制選項來限制服務(wù)器對一個賬戶允許的使用范圍。

  #vi /etc/my.cnf

  [mysqld]

  max_user_connections 2

  8.用戶目錄權(quán)限限制

  默認的mysql是安裝在/usr/local/mysql,而對應(yīng)的數(shù)據(jù)庫文件在/usr/local/mysql/var目錄下,因此,必須保證該目錄不能讓未經(jīng)授權(quán)的用戶訪問后把數(shù)據(jù)庫打包拷貝走了,所以要限制對該目錄的訪問。確保mysqld運行時,只使用對數(shù)據(jù)庫目錄具有讀或?qū)憴?quán)限的linux 用戶來運行。

  # chown -R root /usr/local/mysql/ //mysql主目錄給root

  # chown -R mysql.mysql /usr/local/mysql/var //確保數(shù)據(jù)庫目錄權(quán)限所屬mysql用戶

#p#

  9.命令歷史記錄保護

  數(shù)據(jù)庫相關(guān)的shell操作命令都會分別記錄在.bash_history,如果這些文件不慎被讀取,會導(dǎo)致數(shù)據(jù)庫密碼和數(shù)據(jù)庫結(jié)構(gòu)等信息泄露,而登陸數(shù)據(jù)庫后的操作將記錄在.mysql_history文件中,如果使用update表信息來修改數(shù)據(jù)庫用戶密碼的話,也會被讀取密碼,因此需要刪除這兩個文件,同時在進行登陸或備份數(shù)據(jù)庫等與密碼相關(guān)操作時,應(yīng)該使用-p參數(shù)加入提示輸入密碼后,隱式輸入密碼,建議將以上文件置空。

  # rm .bash_history .mysql_history //刪除歷史記錄

  # ln -s /dev/null .bash_history //將shell記錄文件置空

  # ln -s /dev/null .mysql_history //將mysql記錄文件置空

  10.禁止MySQL對本地文件存取

  在mysql中,提供對本地文件的讀取,使用的是load data local infile命令,默認在5.0版本中,該選項是默認打開的,該操作令會利用MySQL把本地文件讀到數(shù)據(jù)庫中,然后用戶就可以非法獲取敏感信息了,假如你不需要讀取本地文件,請務(wù)必關(guān)閉。應(yīng)該禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。網(wǎng)絡(luò)上流傳的一些攻擊方法中就有用它LOAD DATA LOCAL INFILE的,同時它也是很多新發(fā)現(xiàn)的SQL Injection攻擊利用的手段!黑客還能通過使用LOAD DATALOCAL INFILE裝載“/etc/passwd”進一個數(shù)據(jù)庫表,然后能用SELECT顯示它,這個操作對服務(wù)器的安全來說,是致命的。可以在my.cnf中添加local-infile=0,或者加參數(shù)local-infile=0啟動mysql。

  #/usr/local/mysql/bin/mysqld_safe –user=mysql –local-infile=0 &

  #mysql> load data local infile ’sqlfile.txt’ into table users fields terminated by ‘,’;

  #ERROR 1148 (42000): The used command is not allowed with this MySQL version

  –local-infile=0選項啟動mysqld從服務(wù)器端禁用所有LOAD DATA LOCAL命令,假如需要獲取本地文件,需要打開,但是建議關(guān)閉。

  11.MySQL服務(wù)器權(quán)限控制

  MySQL權(quán)限系統(tǒng)的主要功能是證實連接到一臺給定主機的用戶,并且賦予該用戶在數(shù)據(jù)庫上的SELECT、INSERT、UPDATE和DELETE等權(quán)限(詳見user超級用戶表)。它的附加的功能包括有匿名的用戶并對于MySQL特定的功能例如LOAD DATA INFILE進行授權(quán)及管理操作的能力。

  管理員可以對user,db,host等表進行配置,來控制用戶的訪問權(quán)限,而user表權(quán)限是超級用戶權(quán)限。只把user表的權(quán)限授予超級用戶如服務(wù)器或數(shù)據(jù)庫主管是明智的。對其他用戶,你應(yīng)該把在user表中的權(quán)限設(shè)成’N'并且僅在特定數(shù)據(jù)庫的基礎(chǔ)上授權(quán)。你可以為特定的數(shù)據(jù)庫、表或列授權(quán),F(xiàn)ILE權(quán)限給予你用LOAD DATA INFILE和SELECT … INTO OUTFILE語句讀和寫服務(wù)器上的文件,任何被授予FILE權(quán)限的用戶都能讀或?qū)慚ySQL服務(wù)器能讀或?qū)懙娜魏挝募?說明用戶可以讀任何數(shù)據(jù)庫目錄下的文件,因為服務(wù)器可以訪問這些文件)。 FILE權(quán)限允許用戶在MySQL服務(wù)器具有寫權(quán)限的目錄下創(chuàng)建新文件,但不能覆蓋已有文件在user表的File_priv設(shè)置Y或N。,所以當(dāng)你不需要對服務(wù)器文件讀取時,請關(guān)閉該權(quán)限。

  #mysql> load data infile ’sqlfile.txt’ into table loadfile.users fields terminated by ‘,’;

  Query OK, 4 rows affected (0.00 sec) //讀取本地信息sqlfile.txt’

  Records: 4 Deleted: 0 Skipped: 0 Warnings: 0

  #mysql> update user set File_priv=’N’ where user=’root’; //禁止讀取權(quán)限

  Query OK, 1 row affected (0.00 sec)

  Rows matched: 1 Changed: 1 Warnings: 0

  mysql> flush privileges; //刷新授權(quán)表

  Query OK, 0 rows affected (0.00 sec)

  #mysql> load data infile ’sqlfile.txt’ into table users fields terminated by ‘,’; //重登陸讀取文件

  #ERROR 1045 (28000): Access denied for user ‘root’@'localhost’ (using password: YES) //失敗

  # mysql> select * from loadfile.users into outfile ‘test.txt’ fields terminated by ‘,’;

  ERROR 1045 (28000): Access denied for user ‘root’@'localhost’ (using password: YES)

  為了安全起見,隨時使用SHOW GRANTS語句檢查查看誰已經(jīng)訪問了什么。然后使用REVOKE語句刪除不再需要的權(quán)限。

  12.使用chroot方式來控制MySQL的運行目錄

  Chroot是linux中的一種系統(tǒng)高級保護手段,它的建立會將其與主系統(tǒng)幾乎完全隔離,也就是說,一旦遭到什么問題,也不會危及到正在運行的主系統(tǒng)。這是一個非常有效的辦法,特別是在配置網(wǎng)絡(luò)服務(wù)程序的時候。

#p#

  13.關(guān)閉對無關(guān)的Web程序訪問的支持

  如果不打算讓W(xué)eb訪問使用MySQL數(shù)據(jù)庫,沒有提供諸如PHP這樣的Web語言的時候,重新設(shè)置或編譯你的PHP,取消它們對MySQL的默認支持。假如服務(wù)器中使用php等web程序,試試用Web形式非法的請求,如果得到任何形式的MySQL錯誤,立即分析原因,及時修改Web程序,堵住漏洞,防止MySQL暴露在web面前。

  對于Web的安全檢查,在MySQL官方文檔中這么建議,對于web應(yīng)用,至少檢查以下清單:

  試試用Web形式輸入單引號和雙引號(‘’’和‘”’)。如果得到任何形式的MySQL錯誤,立即分析原因。

  試試修改動態(tài)URL,可以在其中添加%22(‘”’)、%23(‘#’)和%27(‘’’)。

  試試在動態(tài)URL中修改數(shù)據(jù)類型,使用前面示例中的字符,包括數(shù)字和字符類型。你的應(yīng)用程序應(yīng)足夠安全,可以防范此類修改和類似攻擊。

  試試輸入字符、空格和特殊符號,不要輸入數(shù)值字段的數(shù)字。你的應(yīng)用程序應(yīng)在將它們傳遞到MySQL之前將它們刪除或生成錯誤。將未經(jīng)過檢查的值傳遞給MySQL是很危險的!

  將數(shù)據(jù)傳給MySQL之前先檢查其大小。

  用管理賬戶之外的用戶名將應(yīng)用程序連接到數(shù)據(jù)庫。不要給應(yīng)用程序任何不需要的訪問權(quán)限。

  14.數(shù)據(jù)庫備份策略

  使用 mysqldump進行備份非常簡單,如果要備份數(shù)據(jù)庫” nagios_db_backup ”,使用命令,同時使用管道gzip命令對備份文件進行壓縮,建議使用異地備份的形式,可以采用Rsync等方式,將備份服務(wù)器的目錄掛載到數(shù)據(jù)庫服務(wù)器,將數(shù)據(jù)庫文件備份打包在,通過crontab定時備份數(shù)據(jù):

  #!/bin/sh

  time=`date +”(“%F”)”%R`

  $/usr/local/mysql/bin/mysqldump -u nagios -pnagios nagios | gzip >/home/sszheng/nfs58/nagiosbackup/nagios_backup.$time.gz

  # crontab -l

  # m h dom mon dow command

  00 00 * * * /home/sszheng/shnagios/backup.sh

  恢復(fù)數(shù)據(jù)使用命令:

  gzip -d nagios_backup.\(2008-01-24\)00\:00.gz

  nagios_backup.(2008-01-24)00:00

  #mysql –u root -p nagios < /home/sszheng/nfs58/nagiosbackup/nagios_backup.\(2008-01-24\)12\:00

  15. Mysqld安全相關(guān)啟動選項

  –local-infile[={0|1}]

  如果用–local-infile=0啟動服務(wù)器,則客戶端不能使用LOCAL in LOAD DATA語句。

  –old-passwords

  強制服務(wù)器為新密碼生成短(pre-4.1)密碼哈希。當(dāng)服務(wù)器必須支持舊版本客戶端程序時,為了保證兼容性這很有用。

  (OBSOLETE) –safe-show-database

  在以前版本的MySQL中,該選項使SHOW DATABASES語句只顯示用戶具有部分權(quán)限的數(shù)據(jù)庫名。在MySQL 5.1中,該選項不再作為現(xiàn)在的 默認行為使用,有一個SHOW DATABASES權(quán)限可以用來控制每個賬戶對數(shù)據(jù)庫名的訪問。

  –safe-user-create

  如果啟用,用戶不能用GRANT語句創(chuàng)建新用戶,除非用戶有mysql.user表的INSERT權(quán)限。如果你想讓用戶具有授權(quán)權(quán)限來創(chuàng)建新用戶,你應(yīng)給用戶授予下面的權(quán)限:

  mysql> GRANT INSERT(user) ON mysql.user TO ‘user_name’@'host_name’;

  這樣確保用戶不能直接更改權(quán)限列,必須使用GRANT語句給其它用戶授予該權(quán)限。

  –secure-auth

  不允許鑒定有舊(pre-4.1)密碼的賬戶。

  16.information_schema 安全

  在用戶角度來看,INFORMATION_SCHEMA只是一個以插件方式存在的存儲引擎,編譯安裝的時候

  –disable-information-schema 就行了

  added TRIGGER_ACL check for I_S.TRIGGERS

通過文章,我們把LAMP安全的內(nèi)容都學(xué)了一遍,不會的可以翻看前面的文章,希望你們的LAMP運行越來越好!

【編輯推薦】

  1. LAMP安全加固之PHP篇
  2. LAMP安全加固之apache篇
  3. LAMP下虛擬主機用戶個人網(wǎng)頁的架設(shè)
  4. 從 WAMP 到 LAMP 看穿 LAMP
  5. 運用apt工具傻瓜式安裝、配置、拆卸、卸載LAMP
  6. LAMP Web 技術(shù)平臺體系簡介
  7. 編譯安裝lamp 常用項目
責(zé)任編輯:趙鵬 來源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-03-23 15:17:44

2011-03-23 14:49:27

LAMP安全apache

2021-08-12 10:31:59

MySQL安全方法

2011-03-21 11:08:15

LAMPMySQL

2011-03-21 15:00:13

LAMPMySQL

2011-03-11 13:58:51

2011-03-09 16:28:25

2011-03-23 11:14:47

LAMP配置

2012-08-01 09:12:46

2011-03-23 16:24:44

LAMPMySQL

2010-05-19 18:42:23

2010-01-22 17:57:40

2019-04-12 14:07:13

系統(tǒng)安全Linux賬號安全

2014-01-09 10:49:55

2010-03-08 11:25:33

2021-08-05 10:21:18

NSAKubernetes安全

2021-08-26 10:05:31

APP安全加密網(wǎng)絡(luò)攻擊

2009-10-14 09:46:18

2019-02-12 09:52:20

Linux安全Windows

2013-07-15 10:39:43

點贊
收藏

51CTO技術(shù)棧公眾號