【MongoDB】Docker部署的MongoDB的用戶鑒權問題


Docker部署的MongoDB的用戶鑒權問題

寫這篇博客的起因是在阿里雲上用Docker部署了一個MongoDB數據庫,用來存畢設網站用到的數據庫。因為數據量比較小,並且沒有隱私數據,所以並沒有設置密碼。沒想到被黑了,有人把所有的數據Copy走后把所有庫都刪除了,並且留下了一封勒索0.0015BTC的文檔。

為了防止此類事件再次發生,我們要對MongoDB進行加鎖,換端口等一系列措施。這里記錄了我是怎么做的。

MongoDB鏡像

采用最新的MongoDB:latest鏡像。

換端口

不把MongoDB服務映射到默認的27017端口上,因為這樣很容易被黑客掃描的時候檢測出來。直接在部署Docker的時候把容器內部27017映射到其他關口上。

最后在防火牆平台上開放這條映射規則,關閉原來的27017端口映射規則。

啟動Docker

建立Docker時用如下命令:

    sudo docker run -it mongoDB:latest --name="MongoDB" mongod --auth

最后加--auth這個參數。這樣登錄時需要用戶名和密碼。

設置admin庫

在docker中運行mongo,接入數據庫,然后use admin,進入admin庫,為admin庫增加一個admin用戶:

    db.createUser({user: 'admin', pwd: 'password', roles: ['userAdminAnyDatabase']})

然后可以使用數據庫的圖形界面,用admin賬號登錄數據庫,然后創建角色並賦予權限。

角色與權限

可以為每一個數據庫都設置角色和權限。

  • Read:允許用戶讀取指定數據庫(不可進行任何更改,只能查看)

  • readWrite:允許用戶讀寫指定數據庫(任何操作,包括刪有權限db中的col權限)

  • dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile

  • userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶

  • clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。

  • readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限

  • readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限

  • userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限

  • dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。

  • root:只在admin數據庫中可用。超級賬號,超級權限


免責聲明!

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



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