MongoDB安全配置

wyzsk發表於2020-08-19
作者: zhangsan · 2014/07/01 12:31

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,getShardVersion 
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:\mongodb\data --logpath d:\mongodb\log\mongodb.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管理

不足之處求大牛指正!

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章