Mysql的安全設定

來源:互聯網
上載者:User

Mysql的安全設定

我們把Mysql安裝在 /usr/local/mysql目錄下,我們必須建立一個使用者名稱為mysql,組為mysql的使用者來運行我們的mysql,同時我們把它的設定檔拷貝到 /etc目錄下:
# cp suport-files/my-medium.cnf /etc/my.cnf
chown root:sys /etc/my.cnf
chmod 644 /etc/my.cnf

使用使用者mysql來啟動我們的mysql:
# /usr/local/mysql/bin/mysqld_safe -user=mysql &

(1) 修改root使用者的的口令
預設安裝的mysql是沒有密碼的,所以我們要修改,以防萬一。下面採用三種方式來修改root的口令。

* 用mysqladmin命令來改root使用者口令
# mysqladmin -uroot password test
這樣,MySQL資料庫root使用者的口令就被改成test了。(test只是舉例,我們實際使用的口令一定不能使用這種易猜的弱口令)

* 用set password修改口令:
mysql> set password for root@localhost=password('test');
這時root使用者的口令就被改成test了。

* 直接修改user表的root使用者口令  
mysql> use mysql;
mysql> update user set password=password('test') where user='root';
mysql> flush privileges;

這樣,MySQL資料庫root使用者的口令也被改成test了。其中最後一句命令flush privileges的意思是強制重新整理記憶體授權表,否則用的還是緩衝中的口令,這時非法使用者還可以用root使用者及空口令登陸,直到重啟MySQL伺服器。

(2) 刪除預設的資料庫和使用者
我們的資料庫是在本地,並且也只需要本地的php指令碼對mysql進行讀取,所以很多使用者不需要。mysql初始化後會自動產生空使用者和test庫,這會對資料庫構成威脅,我們全部刪除。
我們使用mysql用戶端程式串連到本地的mysql伺服器後出現如下提示:
mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not(host="localhost" and user="root");
mysql> flush privileges;

(3) 改變預設mysql管理員的名稱
這個工作是可以選擇的,根據個人習慣,因為預設的mysql的管理員名稱是root,所以如果能夠修改的話,能夠防止一些指令碼小子對系統的窮舉。我們可以直接修改資料庫,把root使用者改為"admin"
mysql> use mysql;
mysql> update user set user="admin" where user="root";
mysql> flush privileges;

(4) 提高本地安全性
提高本地安全性,主要是防止mysql對本地檔案的存取,比如駭客通過mysql把/etc/passwd擷取了,會對系統構成威脅。mysql對本地檔案的存取是通過SQL語句來實現,主要是通過Load DATA LOCAL INFILE來實現,我們能夠通過禁用該功能來防止駭客通過SQL注射等擷取系統核心檔案。
禁用該功能必須在 my.cnf 的[mysqld]部分加上一個參數:
set-variable=local-infile=0

(5) 禁止遠端連線mysql
因為我們的mysql只需要本地的php指令碼進行串連,所以我們無需開socket進行監聽,那麼我們完全可以關閉監聽的功能。
有兩個方法實現:
* 配置my.cnf檔案,在[mysqld]部分添加 skip-networking 參數
* mysqld伺服器中參數中添加 --skip-networking 啟動參數來使mysql不監聽任何TCP/IP串連,增加安全性。如果要進行mysql的管理的話,可以在伺服器本地安裝一個phpMyadmin來進行管理。

(6) 控制資料庫存取權限
對於使用php指令碼來進行互動,最好建立一個使用者只針對某個庫有 update、select、delete、insert、drop table、create table等許可權,這樣就很好避免了資料庫使用者名稱和密碼被駭客查看後最小損失。
比如下面我們建立一個資料庫為db1,同時建立一個使用者test1能夠訪問該資料庫。
mysql> create database db1;
mysql> grant select,insert,update,delete,create,drop privileges on db1.* to test1@localhost identified by 'admindb';
以上SQL是建立一個資料庫db1,同時增加了一個test1使用者,口令是admindb,但是它只能從本地串連mysql,對db1庫有select,insert,update,delete,create,drop操作許可權。

(7) 限制一般使用者瀏覽其他使用者資料庫
如果有多個資料庫,每個資料庫有一個使用者,那麼必須限制使用者瀏覽其他資料庫內容,可以在啟動MySQL伺服器時加--skip-show-database 啟動參數就能夠達到目的。

( 忘記mysql密碼的解決辦法
如果不慎忘記了MySQL的root密碼,我們可以在啟動MySQL伺服器時加上參數--skip-grant-tables來跳過授權表的驗證 (./safe_mysqld --skip-grant-tables &),這樣我們就可以直接登陸MySQL伺服器,然後再修改root使用者的口令,重啟MySQL就可以用新口令登陸了。

(9) 資料庫檔案的安全
我們預設的mysql是安裝在/usr/local/mysql目錄下的,那麼對應的資料庫檔案就是在/usr/local/mysql/var目錄下,那麼我們要保證該目錄不能讓未經授權的使用者訪問後把資料庫打包拷貝走了,所以要限制對該目錄的訪問。
我們修改該目錄的所屬使用者和組是mysql,同時改變存取權限:
# chown -R mysql.mysql /usr/local/mysql/var
# chmod -R go-rwx /usr/local/mysql/var

(10) 刪除記錄
執行以上的命令會被shell記錄在曆史檔案裡,比如bash會寫入使用者目錄的.bash_history檔案,如果這些檔案不慎被讀,那麼資料庫的密碼就會泄漏。使用者登陸資料庫後執行的SQL命令也會被MySQL記錄在使用者目錄的.mysql_history檔案裡。如果資料庫使用者用SQL語句修改了資料庫密碼,也會因.mysql_history檔案而泄漏。所以我們在shell登陸及備份的時候不要在-p後直接加密碼,而是在提示後再輸入資料庫密碼。
另外這兩個檔案我們也應該不讓它記錄我們的操作,以防萬一。
# rm .bash_history .mysql_history
# ln -s /dev/null .bash_history
# ln -s /dev/null .mysql_history

(11) 其他
另外還可以考慮使用chroot等方式來控制mysql的運行目錄,更好的控制許可權,具體可以參考相關文章。

4. vsFTPd安全設定

vsFTPd是一款非常著名的ftp daemon程式,目前包括Redhat.com在內很多大公司都在使用,它是一款非常安全的程式,因為它的名字就叫:Very Secure FTP Daemon (非常安全的FTP伺服器)。
vsftpd設定選項比較多,涉及方方面面,我們下面主要是針對安全方面進行設定。
目前我們的需求就是使用系統帳戶同時也作為是我們的FTP帳戶來進行我們檔案的管理,目前假設我只需要一個帳戶來更新我的網站,並且我不希望該帳戶能夠登陸我們的系統,比如我們的網站的目錄是在/usr/www下面,那麼我們建立一個使用者ftp,它的主目錄是/usr/www,並且它的shell是/usr/sbin/nologin,就是沒有shell,防止該使用者通過ssh等登陸到系統。

下面在進行系統詳盡的設定,主要就是針對vsftpd的設定檔vsftpd.conf檔案的配置。

(1) 禁止匿名使用者存取, 我們不需要什麼匿名使用者,直接禁止掉:
anonymous_enable=NO

(2) 允許本機使用者登陸,因為我們需要使用ftp使用者來對我們網站進行管理:
local_enable=YES

(3) 只允許系統中的ftp使用者或者某些指定的使用者訪問ftp,因為系統中帳戶眾多,不可能讓誰都訪問。
開啟使用者檔案清單功能:
userlist_enable=YES
只允許使用者檔案清單中的使用者訪問ftp:
userlist_deny=NO
使用者名稱檔案清單路徑:
userlist_file=/etc/vsftpd.user_list

然後在/etc下建立檔案 vsftpd.user_list 檔案,一行一個,把使用者ftp加進去,同時也可以加上你允許訪問的系統帳戶名稱。

(4) 禁止某些使用者登陸ftp:
pam_service_name=vsftpd
指出VSFTPD進行PAM認證時所使用的PAM設定檔名,預設值是vsftpd,預設PAM設定檔是/etc/pam.d/vsftpd。

/etc/vsftpd.ftpusers
VSFTPD禁止列在此檔案中的使用者登入FTP伺服器,使用者名稱是一行一個。這個機制是在/etc/pam.d/vsftpd中預設設定的。

這個功能和(3)裡的功能有點類似,他們倆能結合使用,那樣就最好了。

(5) 把本機使用者鎖定在自己的主目錄,防止轉到其他目錄,比如把/etc/passwd給下載了:
chroot_local_users=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
然後在/etc下建立vsftpd.chroot_list檔案,裡面把我們要限制的本地帳戶加進去,一行一個,我們加上ftp,防止它登陸到系統。

(6) 隱藏檔案真實的所有使用者和組資訊,防止駭客拿下ftp後查看更多系統使用者資訊:
hide_ids=YES

(7) 取消ls -R命令,節省資源,因為使用該命令,在檔案清單很多的時候將浪費大量系統資源:
ls_recurse_enable=NO

( 上傳檔案的預設許可權,設定為022:
local_umask=022
如果要覆蓋刪除等,還要開啟:
write_enable=YES

(9) ftp的banner資訊,為了防止駭客擷取更多伺服器的資訊,設定該項:
ftpd_banner=banner string
把後面的banner string設為你需要的banner提示資訊,為了安全,建議不要暴露關於vsFTPd的任何資訊。
另外,如果你的資訊比較多的話,可以設定為提示資訊是讀取一個檔案中的資訊:
banner_file=/directory/vsftpd_banner_file

(10) 開啟日誌功能:
xferlog_enable=YES
同時設定日誌的目錄:
xferlog_file=/var/log/vsftpd.log
啟用詳細的日誌記錄格式:
xferlog_enable=YES

(11) 如果開啟虛使用者功能等,那麼建議關閉本機使用者登陸:
local_enable=NO

vsFTPd還有很多安全設定,畢竟人家的名字就是:Very Secure FTP Daemon,反正它的溢出漏洞什麼的是很少的,如果要更安全,建議按照自己的需要設定vsftpd,設定的好,它絕對是最安全的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.