MYSQL伺服器內部安全性-安全資料目錄訪問
來源:互聯網
上載者:User
mysql|安全|安全性|訪問|伺服器|資料|資料目錄 本章主要討論作為MySQL管理員的您,在維護MySQL安裝的安全性和完整性方面能夠做些什麼。我們已經在第11章中略微談到了一點安全性問題,如設定初始的MySQLroot 的口令的重要性以及怎樣建立使用者帳號。這些內容是作為啟動和運行安裝過程的一部分被討論
的。在本章中,我們將更詳細地討論以下與安全性相關的問題:
為什麼說安全性是重要的,應該警惕哪些攻擊?
從伺服器主機中的使用者那裡您將面臨什麼風險(內部安全性蘢鍪裁矗?br> 從在網路上串連到伺服器的客戶機那裡您將面臨什麼風險(外部安全性),能做什嗎?
MySQL管理員有責任保護資料庫內容的安全,使得記錄只能由經過嚴格認證的那些使用者訪問。這包括內部安全性和外部安全性。
內部安全性關心檔案系統級的問題,如保護MySQL資料目錄免遭擁有運行伺服器的機器帳號的使用者的攻擊。但是,如果資料目錄內容的檔案許可權過分隨意,有人可以將對應這些表的檔案進行簡單的替換的話,內部安全性就不能很好地確保適當建立對網路上客戶機訪
問的授權表的控制。
外部安全性關心客戶機從外部串連的問題,如防止MySQL伺服器免遭通過網路進來的通過伺服器的串連請求對資料庫內容訪問的攻擊。要建立MySQL授權表使得它們不允許對伺服器所管理的資料庫的訪問(除非提供了有效名字和口令)。
本章提供了應該瞭解的有關問題的指導,並說明如何防止內部和外部層級中未認證的訪問。
MySQL伺服器提供了一個通過mysql資料庫中的授權表來實現的靈活的許可權系統。可以設定這些表的內容來允許或拒絕資料庫對客戶機的訪問。這提供了關於未認證的網路訪問資料的安全性。但是,如果伺服器主機上的其他使用者具有對該資料目錄內容的直接存取權,則
將不能對訪問資料的網路建立良好的安全性。除非知道您是曾在運行MySQL伺服器的機器上註冊的惟一的一個人,否則需要關心在該機器上的其他使用者獲得對資料目錄訪問的可能性。
以下是您想要保護的內容:
資料庫檔案。顯然想要維護由伺服器維護的資料庫的保密性。資料庫的所有者通常要考慮資料庫內容的專有性。即使他們不考慮,也最多是使資料庫的內容公用化,而不會使那些內容因資料庫目錄安全性低而被泄露。
記錄檔。常規和更新日誌必須安全,因為它們包含了查詢文本。這有相當的利害關係,因為具有記錄檔訪問的任何人都可以監控發生在資料庫中的交易處理。
與記錄檔有關的更為特殊的安全性問題是,像GRANT 和SET PASSWORD 這樣的查詢被記錄在日誌中了。常規和更新記錄檔包含敏感的查詢文本,其中包括了口令(MySQL使用口令加密,但這隻適用於在口令設定之後的串連建立。設定口令的過程包含在GRANT、INSERT 或SET PASSWORD 這樣的查詢中,但這些查詢以純文字的形式被記錄。)如果一個攻擊者具有對日誌的讀訪問權,那他只需在日誌中對GRANT 或PASSWORD 這樣的詞運行grep 就能找到敏感資訊。
顯然,您不想讓伺服器主機上的其他使用者擁有對資料目錄檔案的寫訪問權,因為那樣的話,他們就可以在狀態檔案或資料庫表上肆意踐踏。但讀訪問也很危險。如果表檔案可讀取,那麼竊取檔案並使MySQL自己以純文字的形式顯示表的內容是微不足道的事。可按下列步
驟進行:
1) 在伺服器主機上安裝您的MySQL伺服器,但使用與正式伺服器不同的連接埠、通訊端和資料檔案。
2) 運行mysql_install_db 初始化您的資料目錄。這將允許您作為MySQL的root 使用者訪問伺服器,因此您將具有完全控制伺服器訪問機制的權利。它還建立了一個test 資料庫。
3) 將您想竊取的表的相應檔案拷貝到伺服器資料目錄下的test 子目錄中。
4) 啟動作案伺服器。您可以隨意訪問這些表。SHOW TABLES FROM test 將顯示您擁有一個被竊取表的備份, SELECT * 將顯示任何這些表的全部內容。
5) 如果更壞一點,開啟伺服器的匿名使用者帳號的許可權,使任何人都能從任何地方串連到該伺服器來訪問您的test 資料庫。現在,您已經向全世界公布了這些被偷竊的表。
考慮一下剛才的情況,然後顛倒過來想。您希望有人對您這樣做嗎?當然不要。
通過在資料目錄中執行ls -l 可以確定資料目錄中是否包含非安全的檔案或目錄。應查看具有以開啟的“組”或“其他”許可權的檔案或目錄。以下是一個非安全資料目錄的部分列表,是該資料目錄中的一部分資料庫目錄:
正如您所看到的,有些資料庫目錄有正確的許可權,而有些則不是這樣。本例中的情況是由於時間引起的。較老的伺服器建立了限制較少的許可權,且較老的伺服器與較新的伺服器相比,在設定許可權方面不嚴格(請注意,有更多限制的目錄, menager 和t m p,都有更為新的日期)。MySQL當前的版本確保這些檔案只對伺服器啟動並執行使用者可讀。
讓我們來安排這些許可權,使得只有伺服器的使用者才能訪問它們。主要的保護手段來自由UNIX 檔案系統本身提供的工具,這些工具可設定檔案和目錄的所有權及方式。操作步驟如下:
1) 定位到資料目錄中:
% cd DATADIR
2 ) 設定該資料目錄下所有檔案的所有權為運行該伺服器的帳號所擁有(必須以root 身份執行這一步)。在本書中,筆者對此帳號的使用者名稱和組名使用mysqladm 和mysqlg r p。可以用下列命令之一修改所有權:
# chown -R mysqladmin.mysqlgrp
# find . -follow -type d -print | xargs chown mysqladmin.mysqlgrp
3 ) 修改資料目錄和資料庫目錄的方式,使得它們僅對於mysqladm 是可讀的。這樣防止了其他使用者訪問資料目錄的內容。可以利用下列命令之一來進行,這些命令或者以root 或者以mysqladm 運行(後者更好,可以使作為root 啟動並執行命令數量最小化):
% chmod -R go-rwx
% find . -follow -type d -print | xargs chmod go -rwx
4 ) 對mysqladm 使用者佈建資料目錄內容的所有權和方式。現在,您應該確保總是以mysqladm 運行,因為它現在是唯一擁有該資料目錄訪問權的使用者。作為非root 使用者運行伺服器的過程已在第11章中介紹。
在上述步驟之後,將擁有以下許可權: