Mongo開啟安全認證

2021-10-02 01:10:28 字數 3469 閱讀 5421

之前安裝mongo為了省事兒,就沒有開啟keyfile和sequrity,結果系統上線,被運維組做安全掃瞄,掃出了安全漏洞,結果還得開啟認證。事實再次印證,出來混遲早得還,所以開始就不要為了省事兒,偷懶少做工作了,後期還得帶著風險補回來,下面來說說安全認證這點事兒吧

如果不開啟的話,mongo只要有乙個admin使用者,就會不用輸入任何使用者名稱密碼登陸進系統,可以檢視到資料庫中的資料,mongo在安裝後就會有乙個預設的使用者,在不輸入任何使用者名稱和密碼時,都可以連線資料庫並獲取其中的所有資料,很流氓吧。如下圖所示:

看看,如果不開啟mongo的安全認證,只要對方知道你的資料庫ip和埠,就可以隨間拿到你的資料了。所以對於生產環境db來講,開啟其它全認證還是很有必要的。下面來說說怎麼開啟它。

只需要在配製檔案中進行如下配製就可以

下面配製中的

security:

authorization: "enabled"是關鍵,如果不需要開啟安全認證,可以把這個注掉,預設為disable

storage:

dbpath: '/data/db'

systemlog:

destination: file

path: '/data/mongo/mongo.log'

processmanagement:

fork: true

net:

bindip: 127.0.0.1,192.168.1.223

port: 27017

security:

authorization: "enabled"

#operationprofiling:

# mode: "slowop"

如果你的資料庫是多台分片或集群,那麼在集群間做資料複製時,還需要增加keyfile的認證。但如果是單台mongo,就不需要做此步操作了,如果集群之前不開啟keyfile,冒似是每次登陸副本集做任何操作都需要做使用者授權,大家可以試下如果不加keyfile的直觀現象。那如何開啟keyfile呢,需要以下幾步

openssl rand -base64 745 > /data/mongo/mongodb-keyfile
chmod 400 /data/mongo/mongodb-keyfile
storage:

dbpath: '/data/db'

systemlog:

destination: file

path: '/data/mongo/mongo.log'

processmanagement:

fork: true

net:

bindip: 127.0.0.1,192.168.1.188

port: 27017

replication:

replsetname: 'shard-a'

#sharding:

# clusterrole: shardsvr

security:

keyfile: '/data/mongo/mongodb-keyfile'

authorization: 'enabled'

#operationprofiling:

# mode: 'slowop'

注:如果是分片的話,建議配製和分片還有副本集都用相同的keyfile,免得配不好容易出錯,另外路由的配製,只需要開啟 authorization: 'enabled』即可,不需要配製keyfile。

接下來重啟db即可了

db重啟後,我發現原來建立的應用使用者無法訪問資料庫了,一直報授權問題,給當前使用者用以下命令授權,扔無法訪問

db.getsiblingdb("admin").auth("admin", "admin" )

db.getsiblingdb("backend").auth("backend", "backend" )

後來嘗試在admin資料庫建立乙個system使用者,該使用者擁有root角色,再用system使用者授權,解決了無法訪問資料庫中資料問題。

db.createuser(]}

)#db.auth('system',c4t2s~bwre)

db.grantrolestouser( "admin", [  ] )

db.grantrolestouser("backend", [ ] )

這樣admin和backend使用者就都有了對業務庫backend的訪問許可權了

把sequrity開啟後,如果提示未授權需要執行以下兩句

db.getsiblingdb("admin").auth("admin", "c4t2s~bwre111" )

db.getsiblingdb("admin").auth("system", "c4t2s~bwre111" )

db.getsiblingdb("backend").auth("backend", "krbcmz$x1p111" )

read : 授權user唯讀資料的許可權,允許使用者讀取指定的資料庫

readwrite 授權user讀/寫資料的許可權,允許使用者讀/寫指定的資料庫

dbadmin:在當前的資料庫中執行管理操作,如索引的建立、刪除、統計、檢視等

dbowner:在當前的資料庫中執行任意操作,增、刪、改、查等

useradmin :在當前的資料庫中管理user,建立、刪除和管理使用者。

backup

restore

readanydatabase:授權在所有的資料庫上讀取資料的許可權,只在admin 中可用

readwriteanydatabase:授權在所有的資料庫上讀寫資料的許可權,只在admin 中可用

useradminanydatabase:授權在所有的資料庫上管理user的許可權,只在admin中可用

dbadminanydatabase: 授權管理所有資料庫的許可權,只在admin 中可用

clusteradmin:授權管理集群的最高許可權,只在admin中可用,可以用mongostat

clustermanager:授權管理和監控集群的許可權

clustermonoitor:授權監控集群的許可權,對監控工具具有readonly的許可權

hostmanager:管理server

root :超級賬戶和許可權,只在admin中可用

``

mongo許可權認證

mongo新增密碼 mongod port 27017 dbpath data mongodb1 logpath data mongodb1 mongodb.log mongo 10.142 166 95 27017 db.createuser 驗證db.auth user pass 啟動mongo...

mongo開啟驗證

mongodb剛安裝完,建立超級使用者 mongo 進入mongo控制台 mongodb shell version v3.4.10 connecting to mongodb mongodb server version 3.4.10 use admin 進入admin庫 switched to ...

Mongo3 4 2使用者連線認證

themongoclientinstance represents a pool of connections to the database you will only need one instance of classmongoclienteven with multiple threads....