如何掌控您的 MongoDB 安全性

黑客變得更加精密,並且知道如何利用漏洞。如果您的 MongoDB 數據庫中有敏感數據,嚴肅對待安全性至關重要。但該如何做呢?不用擔心!這個教程會為您提供幫助!

在這個教程中,您將學會通過設置安全措施來保護您的 MongoDB 數據庫,並抵禦黑客的攻擊。

繼續閱讀,開始掌控您的 MongoDB 安全性吧!

先決條件

  • 本教程將進行實踐演示。要跟著做,請確保您具有以下條件:
  • A non-root user with sudo privileges.

創建專用管理用戶

MongoDB 沒有內置的身份驗證系統。默認情況下,任何具有對數據庫訪問權限的人都擁有完整的管理特權 —— 非常危險!如何保護您的數據庫?您將創建一個具有管理特權的用戶,並將數據庫鎖定到該管理用戶。

這個設置允許您提供具有管理權限的單一用戶訪問點,同時限制每個用戶在數據庫內的操作。例如,開發人員應該對數據庫具有唯讀訪問權限,而管理員可以創建和編輯數據。

1. 打開終端並運行下面的mongo命令,不帶任何參數。此命令允許您以默認管理員用戶身份連接到MongoDB shell。

這個管理員用戶非常強大,因為它對服務器上的所有數據庫具有完全的讀/寫訪問權限,最好避免將此用戶用於日常工作。

mongo

您將收到一個警告,顯示Access control is not enabled…,如下所示。

此警告表示任何能夠訪問MongoDB服務器的人都可以執行他們想要的數據庫操作,包括但不限於刪除、丟棄、更新數據庫。

此警告之所以出現是因為您尚未啟用訪問控制。暫時不要擔心,您將在以下部分學習如何啟用訪問控制。

Connecting to your MongoDB shell

2. 接下來,運行show dbs命令顯示服務器上的所有數據庫,包括一個普通用戶不應該看到的admin數據庫。

show dbs
Showing all databases on the server

3. 執行以下use admin命令切換到管理數據庫,因為您的重點是創建專用管理用戶。此命令將當前數據庫上下文更改為使用管理數據庫,如下所示。

MongoDB使用管理數據庫存儲訪問控制規則,提供內置身份驗證、用戶名和密碼給用戶及其角色。由於它對數據庫功能至關重要,您無法刪除或重命名管理數據庫。

use admin
Switching to the admin database

4. 現在,複製並粘貼以下代碼到mongo shell中,然後按Enter。此代碼創建一個名為AdminATA的用戶,密碼為LDWbPf6Fy9Ezs3Mv,但您可以根據需要使用不同的憑據。

此新用戶具有對所有數據庫的讀寫(readWriteAnyDatabase)訪問權限,並對所有集合具有管理訪問權限。但是,此用戶沒有刪除/刪除數據庫的權限,也無法刪除或更改其他用戶的權限。

執行命令後如果出現錯誤,請仔細檢查您的代碼,然後重試。

# db.createUser() 方法在當前資料庫上創建一個新使用者,其權限由角色指定。
db.createUser(
{
# 指定用戶名 AdminATA,但您可以輸入任何您喜歡的用戶名
user: "AdminATA",
# passwordPrompt() 方法是一個通用的輔助函數
# 告訴 MongoDB shell 為 AdminATA 用戶提示您輸入密碼。
pwd: passwordPrompt(),
# 指定您希望 AdminATA 用戶具有的角色。
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

5. 在提示時提供一個安全的密碼,如下所示,然後按 Enter。

Providing a secure password

下面,您可以看到一條成功添加用戶的消息。此輸出確認您成功創建了一個具有管理權限並將其限制為所需的最低權限的用戶。

在此時,您已經有了一個名為 AdminATA 的管理用戶,可以在不向所有人開放訪問權限的情況下進行所需的所有操作。

Verifying Successful Admin User Creation in MongoDB

6. 最後,運行 exit 命令退出 mongo shell。

exit
Leaving the mongo shell

通過啟用身份驗證添加安全性

現在您有了一個管理員用戶,您將通過啟用身份驗證添加另一層安全性。這樣做只會給具有正確憑據的用戶提供數據庫訪問權限。

認證指的是通過提供用戶名和密碼或使用驗證令牌等方式來驗證連接的過程。認證確保你就是你所說的人,而不是試圖訪問資源的冒名頂替者。

1. 通過編輯MongoDB配置文件並保存更改來啟用認證,請按以下步驟進行:

  • 在你喜歡的文本編輯器中打開/etc/mongod.conf文件。/etc/mongod.conf文件包含你的MongoDB集群的配置
  • 查找並取消註釋#security指令,刪除指令前的#符號,如下所示。此指令告訴MongoDB在配置文件中查找安全設置。
  • security指令下方添加一行新的內容,內容為authorization: enabled。請注意,authorization: enabled行已縮進(開頭有兩個空格),如下所示。
Adding the authorization parameter

2. 接下來,運行以下systemctl命令重新啟動MongoDB服務器,使更改生效。

sudo systemctl restart mongod

3. 最後,運行以下命令查看MongoDB服務的狀態。

sudo systemctl status mongod

以下是一行文字,顯示為綠色文字:Active: active (running),表示您的 MongoDB 伺服器正在運行並準備好接受連接。

Viewing MongoDB Service Status

測試身份驗證是否正常

您剛剛啟用了身份驗證,但您如何知道它是否正常運作呢?您將登錄管理使用者以測試並確保您的身份驗證通過查看數據庫。

1. 執行以下命令以訪問 mongo shell,就像您在“創建專用管理用戶”部分(第一步)中所做的那樣。

mongo

正如您在下面所看到的,您不再收到有關啟用身份驗證的 Access control is not enabled… 警告。相反,您將收到一條消息,告訴您 MongoDB 伺服器和 MongoDB shell 的版本。

Connecting to the MongoDB Shell

2. 接下來,重新運行 show dbs 命令來檢查您是否仍然可以訪問數據庫。

show dbs

該命令應該會顯示所有數據庫,甚至包括管理數據庫。但正如您在下面所看到的,什麼都沒有顯示出來。為什麼?查看數據庫列表是僅供管理用戶使用的特權。

您尚未將您的 mongo shell 身份驗證為使用 Admin 角色,因此您未獲授權查看數據庫列表。

Listing All Databases (empty)

啟用身份驗證後,如果有人嘗試使用不包含正確憑證的連接字符串訪問數據庫,則連接將失敗。

驗證連接字串是MongoDB安全的核心部分,您應該在應用程序的所有層面實施驗證。所有連接到MongoDB的連接都必須使用包含憑據的驗證字串。這些憑據包括正確的用戶名和密碼。

3. 使用exit命令退出MongoDB shell。

exit

4. 現在,運行下面的命令使用您新建的管理用戶的用戶名(-u)和密碼(-p)登錄MongoDB shell。將AdminATA替換為您在“創建專用管理用戶”部分(第四步)創建的用戶名。

--authenticationDatabase參數告訴MongoDB shell對admin數據庫進行驗證。

mongo -u AdminATA -p --authenticationDatabase admin

5. 在提示時提供管理用戶的密碼。

Providing administrative password
logging into the MongoDB shell as an administrator

6. 最後,重新運行show dbs命令,嘗試查看是否可以查看所有數據庫。

show dbs

此時,您作為管理員用戶,可以看到下面顯示的數據庫列表。

Listing all databases as admin user

結論

在本教程中,您學會了如何建立管理用戶並啟用驗證來進行連接。您已經學會了控制MongoDB安全性並對誰可以訪問服務器上的數據庫施加限制。

在這一點上,您可以決定誰可以訪問什麼。那麼對您來說,下一步是什麼呢?也許學習如何安全使用MongoDB容器

Source:
https://adamtheautomator.com/mongodb-security/