程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> MongoDB安全配置詳解

MongoDB安全配置詳解

編輯:更多關於編程

       這篇文章主要介紹了MongoDB安全配置詳解,本文來自國內安全廠商烏雲平台,講解的還是比較全面的,需要的朋友可以參考下

      0x00 MongoDB權限介紹

      1.MongoDB安裝時不添加任何參數,默認是沒有權限驗證的,登錄的用戶可以對數據庫任意操作而且可以遠程訪問數據庫,需以--auth參數啟動。

      2.在剛安裝完畢的時候MongoDB都默認有一個admin數據庫,此時admin數據庫是空的,沒有記錄權限相關的信息。當admin.system.users一個用戶都沒有時,即使mongod啟動時添加了--auth參數,如果沒有在admin數據庫中添加用戶,此時不進行任何認證還是可以做任何操作(不管是否是以--auth 參數啟動),直到在admin.system.users中添加了一個用戶。

      3.MongoDB的訪問分為連接和權限驗證,即使以--auth參數啟動還是可以不使用用戶名連接數據庫,但是不會有任何的權限進行任何操作

      4.admin數據庫中的用戶名可以管理所有數據庫,其他數據庫中的用戶只能管理其所在的數據庫。

      5.在2.4之前版本中,用戶的權限分為只讀和擁有所有權限;2.4版本的權限管理主要分為:數據庫的操作權限、數據庫用戶的管理權限、集群的管理權限,建議由超級用戶在admin數據庫中管理這些用戶。不過依然兼容2.4版本之前的用戶管理方法。

      0x01 MongoDB中用戶的角色說明

      1. read角色

      數據庫的只讀權限,包括:

       代碼如下:

      aggregate,checkShardingIndex,cloneCollectionAsCapped,collStats,count,dataSize,dbHash,dbStats,distinct,filemd5,mapReduce (inline output only.),text (beta feature.)geoNear,geoSearch,geoWalk,group

      2. readWrite角色

      數據庫的讀寫權限,包括:

      read角色的所有權限

       代碼如下:

      cloneCollection (as the target database.),convertToCapped,create (and to create collections implicitly.),renameCollection (within the same database.)findAndModify,mapReduce (output to a collection.)

      drop(),dropIndexes,emptycapped,ensureIndex()

      3. dbAdmin角色

      數據庫的管理權限,包括:

       代碼如下:

      clean,collMod,collStats,compact,convertToCappe

      create,db.createCollection(),dbStats,drop(),dropIndexes

      ensureIndex(),indexStats,profile,reIndex

      renameCollection (within a single database.),validate

      4. userAdmin角色

      數據庫的用戶管理權限

      5. clusterAdmin角色

      集群管理權限(副本集、分片、主從等相關管理),包括:

       代碼如下:

      addShard,closeAllDatabases,connPoolStats,connPoolSync,_cpuProfilerStart_cpuProfilerStop,cursorInfo,diagLogging,

    dropDatabase

      shardingState,shutdown,splitChunk,splitVector,split,top,touchresync

      serverStatus,setParameter,setShardVersion,shardCollection

      replSetMaintenance,replSetReconfig,replSetStepDown,replSetSyncFrom

      repairDatabase,replSetFreeze,replSetGetStatus,replSetInitiate

      logRotate,moveChunk,movePrimary,netstat,removeShard,unsetSharding

      hostInfo,db.currentOp(),db.killOp(),listDatabases,listShardsgetCmdLineOpts,getLog,getParameter,getShardMap,getSha

    rdVersion

      enableSharding,flushRouterConfig,fsync,db.fsyncUnlock()

      6. readAnyDatabase角色

      任何數據庫的只讀權限(和read相似)

      7. readWriteAnyDatabase角色

      任何數據庫的讀寫權限(和readWrite相似)

      8. userAdminAnyDatabase角色

      任何數據庫用戶的管理權限(和userAdmin相似)

      9. dbAdminAnyDatabase角色

      任何數據庫的管理權限(dbAdmin相似)

      0x02 MongoDB安裝注意事項

      1. 安裝的時候需要加--auth

      加了--auth之後MongoDB才需要驗證

      2. 需要加--nohttpinterface

      不加會有一個28017的端口監聽,可以通過網頁管理mongodb,不需要請去掉

      3. 可以加--bind_ip

      加之後可以限制訪問的ip

      4. 可以加--port

      加了之後可以重新制定端口,默認為27017

      5. 安裝完之後需立即在admin數據庫中添加一個用戶

      只有在admin數據庫中添加一個用戶後才能使認證生效

      注:安裝的過程其實就是添加1個服務,指定啟動時候的參數。

      0x03 用戶授權

      1. 2.4之前版本的用戶管理方式

      1.1、進入admin創建一個管理賬號

      代碼如下:

      use admin

      db.addUser("test","test")

      1.2、進入需要使用的數據庫中創建一個程序使用用戶

       代碼如下:

      use test

      db.addUser("test","test")默認擁有讀寫權限

      db.addUser("test","test",True)擁有讀取權限

      2. 2.4版本的用戶管理,也可使用之前版本的方式

      2.1、進入admin創建一個管理賬號

       代碼如下:

      use admin

      db.addUser("test","test")

      2.2、進入admin給使用的數據庫test創建一個對數據庫及日志擁有讀寫權限的賬戶

       代碼如下:

      use admin

      db.addUser({

      "user": "test",

      "pwd": "test",

      "roles": [ ],

      "otherDBRoles": {

      "test": [

      "readWrite"

      ],

      "test_log": [

      "readWrite"

      ]

      }

      })

      0x04 安全配置方案

      1. 安裝的時候加--auth,並立即在admin數據庫創建一個用戶

      默認情況下MongoDB是無需驗證的,所以這是至關重要的一步

      2. 可以考慮安裝的時候修改端口和指定訪問ip

      具體根據實際情況來設定,也可以直接在服務器防火牆上做

      3. 安裝的時候建議加上--nohttpinterface取消默認的一個網頁管理方式

      默認的web管理一般不會用,且很多人不知道,最好關閉

      4. 管理用戶處理

      因需要在admin中建立一個管理賬戶用於管理,最好是設置強密碼,但是不要給其他程序使用

      5. MongoDB服務運行賬戶

      windows下可以使用network service 或者新建一個用戶,使用默認的USERS組,然後添加給予數據庫文件及日志存儲目錄的寫權限,並建議取消對cmd等程序的執行權限。

      linux下新建一個賬戶,給予程序的執行權限和數據庫文件及日志目錄的讀寫權限,並建議取消對sh等程序的執行權限。

      6. 控制好網站或者其他程序使用的連接用戶權限

      網站或者其他程序使用的用戶只給予對應庫的權限,不要使用admin數據庫中的管理賬戶。

      0x05 常用命令

      1. 安裝

      代碼如下:

      mongod --dbpath d:mongodbdata --logpath d:mongodblogmongodb.log ----nohttpinterface --auth --install

      2. 添加用戶

      代碼如下:

      use admin

      db.addUser("test","test")

      3. 顯示所有數據庫

       代碼如下:

      show dbs

      4. 使用某個數據庫

       代碼如下:

      use test

      5. 連接數據庫

      代碼如下:

      mongo test -uroot -p123456

      6. 添加用戶認證

      代碼如下:

      db.auth("username","password")

      7. 查看用戶

      代碼如下:

      db.system.users.find()

      就寫幾個基本的,其他的網上很多,或者用工具連上去之後操作。

      0x06 管理工具

      1. MongoVUE

      客戶端形式的管理工具

      2. rockmongo

      基於php的web管理

      不足之處求大牛指正!

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved