- LAMP網站開發黃金組合Linux+Apache+MySQL+PHP
- 楊明華等編著
- 2018字
- 2018-12-29 19:23:42
6.5 數據文件安全性
數據文件的安全性,是文件系統級的安全問題,如在多用戶服務器上,保護數據文件免遭到其他用戶的查看、修改、或刪除等。相對于數據庫系統本身的安全性,數據文件的安全性也稱為內部安全性。
6.5.1 保護哪些文件
在多用戶服務器上,如果其他用戶具有對MySQL數據文件的訪問權限,則會威脅數據的安全性,需要加以控制。具體來說,所要保護的數據文件包括:
1.數據庫文件
想要保證MySQL數據庫的安全性,必須首先保證數據庫文件的安全性。數據庫管理員要保證數據不能被別人隨便訪問,否則別人可以通過直接拷貝、修改、刪除數據文件,造成數據的泄露或破壞。
2.日志文件
除數據文件之外,還需要保證常規和更新日志的安全性,因為日志文件包含了一些與數據庫交互的查詢文本。有了這些文本,一方面,別人就可以監控發生數據庫中的所有事務處理;另一方面,像GRANT和SET PASSWORD這樣的查詢也在日志中,其中包含一些重要的信息(如登錄密碼等),也會因日志文件的丟失而泄露。
6.5.2 保護Linux文件
上面介紹了Windows操作系統如何控制數據文件的安全性,下面介紹在Linux/UNIX系統中的相應操作。
1.UNIX系統下數據目錄
首先來了解MySQL在LILNX/UNIX下的目錄。MySQL安裝好,運行mysql_db_install腳本就會建立數據目錄和初始數據庫。如果用MySQL源碼包安裝,而且安裝目錄是/usr/local/mysql,那么數據目錄一般會是/usr/local/mysql/var。
每個數據庫都包含一系列表,MySQL是用數據庫名在數據目錄建立一個文件夾,里面有數據表文件,并以表名作為文件名,擴展名分別為MYD、MYI、frm。
下面是一些不同版本MySQL的數據目錄默認訪問屬性:
(1)3.21.xx版本:數據目錄的屬性是775,任何本地用戶都可以讀數據目錄,數據庫文件不安全。
(2)3.22.xx版本:數據目錄的屬性是770,本地的同組用戶既能讀也能寫,數據文件也不安全。
(3)3.23.xx版本數據目錄的屬性是700,只有啟動數據庫的用戶才可以讀寫數據庫文件,這樣保證了本地數據文件的安全。
★ 注意 ★
對于上面所述Linux/UNIX文件系統的訪問屬性代碼所表示的含義,請參考Linux/UNIX相關內容,此處,不作額外介紹。
2.設置數據目錄訪問屬性
假設啟動MySQL數據庫的用戶是mysql,那么使用ls-l命令查看/usr/local/mysql/目錄的訪問權限,其結果可能如下所示:
shell>ls -l /usr/local/mysql total 40 drwxrwxr-x 2 root root 4096 Feb 27 20:07 bin drwxrwxr-x 3 root root 4096 Feb 27 20:07 include drwxrwxr-x 2 root root 4096 Feb 27 20:07 info … shell>ls -l /usr/local/mysql/var total 8 drwx------ 2 mysql mysql 4096 Feb 27 20:08 mysql drwx------ 2 mysql mysql 4096 Feb 27 20:08 test shell>ls -l /usr/local/mysql/var/mysql total 104 -rw------- 1 mysql mysql 0 Feb 27 20:08 columns_priv.MYD -rw------- 1 mysql mysql 1024 Feb 27 20:08 columns_priv.MYI …
想要改變目錄的訪問屬性,可以通過下面兩個命令來完成:
% chown -R mysql.mysql /usr/local/mysql/var % chmod -R go-rwx /usr/local/mysql/var
另外,日志文件也不能忽視,包括shell的日志和MySQL的日志。
(1)shell日志
有些用戶為了便于登錄或備份數據庫,有時會在命令行參數里直接帶數據庫的密碼,如:
% /usr/local/mysql/bin/mysqldump -uroot -ptest test>test.sql % /usr/local/mysql/bin/mysql -uroot -ptest
這些命令會被shell記錄在日志中,比如bash會寫入用戶目錄的.bash_history文件,如果這些文件丟失,那么就會泄露數據庫密碼。
(2)MySQL日志
登錄到MySQL后,用戶提交的SQL命令也會被MySQL記錄,并存放在在用戶目錄的.mysql_history文件里。
為使這兩個文件不記錄數據操作,可做如下操作:
% rm .bash_history .mysql_history % ln -s /dev/null .bash_history % ln -s /dev/null .mysql_history
上面兩條命令把兩個日志文件鏈接到/dev/null,這樣操作就不會被記錄了。
6.5.3 保護Windows文件
雖然本書介紹的是LAMP開發,但是一部分讀者可能在Windows下進行開發,因此也介紹如何在Windows操作系統中保護MySQL數據文件。不妨假設數據文件目錄為“C:\mysql\data”,然后通過具體示例來說明如何保證該目錄的安全。
假設數據庫管理員只希望Windows的系統管理員用戶組(Administrators Group)可以讀取C:\mysql\data下的文件,用戶Super對該目錄有所有的權限,而其他用戶和組只能查看其中的文件和子目錄,而不能讀取數據,則可以通過如下步驟實現這個要求:
(1)用具有系統管理員身份的用戶登錄Windows,在文件夾“C:\mysql\data”上單擊右鍵,選擇“屬性”命令,在打開的對話框中選擇“安全”選項卡。
(2)除Administrators、Everyone以及Super用戶所在的組之外,刪除其他組,如圖6-1所示。

圖6-1 刪除不能訪問文件夾的用戶組
(3)設置Administrators組的訪問權限,使其只能讀,如圖6-2所示。

圖6-2 設置Administrators組的訪問權限
(4)同設置Administrators組的訪問權限,設置Everyone組的訪問權限,使其只能瀏覽本目錄:單擊Everyone組,并勾掉相應的權限選項。
★ 注意 ★
在設定Everyone的權限的時候,需要將下面的“允許將來自父系的可繼承權限傳遞給該對象”前面的選擇取消掉,如圖6-3所示。這時,屏幕上會彈出一個安全提示,這里選擇“復制”或者“刪除”都可以,意思是是否保留或者刪除“從父系繼承的權限”,再點“刪除”。

圖6-3 設置Everyone組的權限繼承性
(5)設置Super用戶的訪問權限,使其只能完全控制(讀、寫、改)目錄。首先添加Super用戶,如圖6-4所示,從列表中,選擇“Super”用戶,然后單擊“添加”按鈕,然后設定其訪問權限為完全控制。

圖6-4 添加Super用戶
(6)單擊“確定”按鈕。
這樣,除Super之外的用戶就不能寫這個文件夾,除Administrators之外的用戶不能讀,而只能瀏覽目錄。也可以對這些權限作進一步限制,在此不再贅述。
★ 注意 ★
Windows98沒有考慮文件的安全性問題,如果多個用戶使用一臺電腦,那么一個人的文件,其他人也可以打開、復制、修改或刪除。在Windows NT以及后續版本的系統中,則考慮了這個問題。
Windows NT采用的NTFS文件系統,在安裝Windows NT的時候安裝程序提示是否要將磁盤分區轉換成NTFS格式。只有磁盤采用了NTFS的文件系統,才能給目錄、文件提供安全設置。
- Verilog HDL數字系統設計入門與應用實例
- 腦動力:PHP函數速查效率手冊
- Ceph:Designing and Implementing Scalable Storage Systems
- INSTANT Autodesk Revit 2013 Customization with .NET How-to
- Splunk Operational Intelligence Cookbook
- 工業機器人安裝與調試
- 網絡安全技術及應用
- 空間機械臂建模、規劃與控制
- 工業自動化技術實訓指導
- 嵌入式GUI開發設計
- 重估:人工智能與賦能社會
- Redash v5 Quick Start Guide
- Cloudera Hadoop大數據平臺實戰指南
- Windows 7來了
- 精通ROS機器人編程(原書第2版)