面對MySQL的攻擊,管理員應當盡可能的保證服務器的安全。下面的文章將向您介紹如何在面對MySQL攻擊時保證安全。
當你連接到MySQL服務器時, 你應使用一個密碼。密碼不以明文在上傳輸。客戶端連接序列中的密碼處理在MySQL 4.1.1中已經升級,很安全。如果你仍然使用pre-4.1.1-風格的密碼,加密算法不如新算法強;通過一些工作,可以竊取客戶端和服務器之間的通信 的聰明的攻擊者可以破解密碼。如果客戶端和服務器之間的連接通過不可信任網絡,你應使用SSH隧道來加密通信。
有其它信息以文本傳送,可以被可以看到連接的任何人讀取。如果你擔心這個,你可以使用壓縮協議來使通信更難以解密。要想使連接更加安全,你應使用SSH來獲得加密的MySQL服務器和MySQL客戶端之間的TCP/IP連接。(注釋:你還可以使用MySQL內部OpenSSL支持。)
為了使MySQL系統安全,強烈要求你考慮下列建議:
◆對所有MySQL用戶使用密碼。客戶端程序不需要知道運行它的人員的身份。對於客戶端/服務器應用程序,用戶可以指定客戶端程序的用戶名。例 如,如果other_user沒有密碼,任何人可以簡單地用mysql -u other_user db_name冒充他人調用mysql程序進行連接,進行MySQL攻擊。如果所有用戶有密碼,使用其它用戶的賬戶進行連接要困難得多。
要想更改用戶的密碼,應使用SET PASSWORD語句。還可以直接更新mysql數據庫中的user表。例如,要更改所有root用戶的MySQL賬戶的密碼。
以下為引用的內容:
shell> mysql -u root
mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd')
-> WHERE User='root';
mysql> FLUSH PRIVILEGES;
絕對不要作為Unix的root用戶運行MySQL服務器。這樣做非常危險,因為任何具有FILE權限的用戶能夠用root創建文件(例如,~root/.bashrc)。為了防止,mysqld拒絕用root運行,除非使用--user=root選項明顯指定。
應可以(並且應該)用普通非特權用戶運行mysqld。你可以創建獨立的Unix中的mysql賬戶來以便使所有內容更加安全。該賬戶只用於管 理MySQL。要想用其它Unix用戶啟動mysqld,增加user選項指定/etc/my.cnf選項文件或服務器數據目錄的my.cnf選項文件中 的[mysqld]組的用戶名。例如:
以下為引用的內容:
[mysqld]
user=mysql
該命令使服務器用指定的用戶來啟動,無論你手動啟動或通過mysqld_safe或mysql.server啟動。
作為其它Unix用戶而不用root運行mysqld,你不需要更改user表中的root用戶名,因為MySQL賬戶的用戶名與Unix賬戶的用戶名無關。
◆不要允許使用表的符號鏈接。(可以用--skip-symbolic-links選項禁用)。如果你用root運行mysqld則特別重要,因為任何對服務器的數據目錄有寫訪問權限的人則能夠刪除系統中的任何文件!
◆確保mysqld運行時,只使用對數據庫目錄具有讀或寫權限的Unix用戶來運行。
◆不要將PROCESS或SUPER權限授給非管理用戶。mysqladmin processlist的輸出顯示出當前執行的查詢正文,如果另外的用戶發出一個UPDATE user SET password=PASSWORD('not_secure')查詢,被允許執行那個命令的任何用戶可能看得到。
mysqld為有SUPER權限的用戶專門保留一個額外的連接,因此即使所有普通連接被占用,MySQL root用戶仍可以登錄並檢查服務器的活動。
可以使用SUPER權限來終止客戶端連接,通過更改系統變量的值更改服務的器操作,並控制復制服務器,防止MySQL攻擊的發生。