MongoDB開啟安全認證


MongoDB開啟安全認證

注意

  • 對MongoDB部署啟用訪問控制會強制執行身份驗證,要求用戶識別自己。當訪問啟用了訪問控制的MongoDB部署時,用戶只能執行由其角色確定的操作。
  • 啟用訪問控制后,請確保在admin數據庫中擁有userAdmin或userAdminAnyDatabase角色的用戶。該用戶可以管理用戶和角色

未開啟復制集的實例

以下過程首先將用戶管理員添加到運行無訪問控制的MongoDB實例,然后啟用訪問控制。

啟動MongoDB

連接到實例

  • 如:
mongo --port=27017
  • 1

創建用戶管理員

  • 在admin數據庫中添加具有userAdminAnyDatabase角色的用戶。例如:
use admin db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

然后斷開連接

重新啟動具有訪問控制的MongoDB實例

  • 使用–auth命令行選項重新啟動mongod實例,如果使用配置文件,則使用security.authorization設置。例如:
mongod --auth --port 27017
  • 1

或者使用配置文件,增加參數:

security:
  authorization: enabled //冒號后面需要空一格
  • 1
  • 2

以用戶管理員身份進行連接和驗證

  • 在連接期間進行身份驗證,例如:
mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  • 1
  • 連接后驗證,例如:
use admin db.auth("myUserAdmin", "abc123" )
  • 1
  • 2
  • 創建用戶的數據庫是該用戶的身份驗證數據庫。雖然用戶將對該數據庫進行身份驗證,但用戶可以在其他數據庫中擔任角色;即用戶的認證數據庫不限制用戶的特權。

開啟復制集的實例

在副本集中執行密鑰文件訪問控制

  1. 對於成員的內部認證,MongoDB可以使用密鑰文件,密鑰文件的內容作為成員的共享密碼。密鑰長度必須在6到1024個字符之間,並且只能包含base64集合中的字符
  2. 密鑰文件的內容在所有相互連接的mongod和mongos實例上必須相同。您必須將密鑰文件存儲在副本集的每個成員上。
  3. 執行內部認證也強制執行用戶訪問控制
  4. 密鑰文件是最低限度的安全形式,最適用於測試或開發環境。

注意:執行訪問控制的以下過程需要停止mongod服務

創建一個密鑰文件

  • 使用密鑰文件身份驗證,副​​本集中的每個mongod實例使用密鑰文件的內容作為共享密碼,用於驗證部署中的其他成員。可以使用您選擇的任何方法生成密鑰文件。例如,以下操作使用openssl生成密碼文件,然后使用chmod來更改文件權限,以便僅為文件所有者提供讀取權限
openssl rand -base64 753 > <path-to-keyfile> chmod 400 <path-to-keyfile>
  • 1
  • 2

將密鑰文件復制到每個副本集成員

  • 將密鑰文件復制到托管副本集成員的每個服務器。確保運行mongod實例的用戶是文件的所有者,並且可以訪問密鑰文件

關閉副本集的所有成員

  • 關閉復制集中的每個mongod,從次節點開始。直到副本集的所有成員都離線,包括任何仲裁者。主節點必須是最后一個成員關閉以避免潛在的回滾。要關閉mongod,請使用mongo shell連接每個mongod,並在admin數據庫上發出db.shutdownServer():
use admin db.shutdownServer()
  • 1
  • 2

啟動執行訪問控制的副本集的每個成員

  • 使用keyFile參數運行mongod同時強制內部身份驗證和基於角色的訪問控制。使用配置文件或命令行啟動副本集中的每個mongod。
  • 配置文件 
    如果使用配置文件,請將security.keyFile選項設置為keyfile的路徑,
security: keyFile:<path-to-keyfilie>
  • 1
  • 2

使用配置文件啟動mongod:

mongod --config <path-to-config-file>
  • 1
  • 命令行 
    如果使用命令行選項,請使用–keyFile數啟動mongod:
mongod --keyFile <path-to-keyfile>
  • 1

連接主節點

  • 通過localhost接口將mongo shell連接到配置服務器mongod主節點 
    必須使用localhost接口連接,因為沒有為部署創建任何用戶。創建第一個用戶后,無論您如何連接到mongod,都必須使用該用戶進行身份驗證。

創建用戶管理員

  • 創建第一個用戶后,localhost異常不再可用。
  • 第一個用戶必須具有創建其他用戶的權限,例如具有userAdminAnyDatabase的用戶。這確保您可以在Localhost異常關閉后創建其他用戶。 
    以下示例在admin數據庫上創建具有userAdminAnyDatabase角色的用戶
admin = db.getSiblingDB("admin") admin.createUser( { user: "fred", pwd: "changeme1", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

驗證用戶管理員

  • 在mongo shell中,使用db.auth()進行身份驗證。
db.getSiblingDB("admin").auth("fred", "changeme1" )
  • 1
  • 或者使用-u ,-p 和–authenticationDatabase參數將新的mongo shell連接到主副本集成員
mongo -u "fred" -p "changeme1" --authenticationDatabase "admin"
  • 1

創建集群管理員(可選)

  • 集群管理員用戶具有clusterAdmin角色,它允許對復制操作的訪問。創建群集管理員用戶並在admin數據庫中分配clusterAdmin角色,例如:
db.getSiblingDB("admin").createUser( { "user" : "ravi", "pwd" : "changeme2", roles: [ { "role" : "clusterAdmin", "db" : "admin" } ] } )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

創建其他用戶(可選)

 

...

 

 

 

來源:https://blog.csdn.net/jeanette_zlj/article/details/79563954


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM