標籤:
MongoDB安全訪問將從以下三個方面得到控制!
1、綁定IP內網地址訪問MongoDB服務
2、設定監聽連接埠
3、使用使用者名稱和密碼
綁定IP內網地址訪問MongoDB服務
MongoDB可以限制只允許某一特定IP來訪問,只要在啟動時加一個參數bind_ip即可,如下:
服務端限制只有192.168.1.103這個IP可以訪問MongoDB服務
[[email protected] bin]# ./mongod --bind_ip 192.168.1.103
用戶端訪問時需要明確指定服務端IP,否則會報錯:
[[email protected] bin]# ./mongo 192.168.1.102MongoDB shell version: 1.8.1connecting to: 192.168.1.103/test>
設定監聽連接埠
官方預設的監聽連接埠是27017,為了安全起見,一般都會修改這個監聽連接埠,避免惡意的串連嘗試,具體如下:
將服務端監聽連接埠改為28018
[[email protected] bin]# ./mongod --bind_ip 192.168.1.103 --port 28018
用戶端訪問時不指定連接埠,會串連到預設連接埠27017,對於本例會報錯
[[email protected] bin]# ./mongo 192.168.1.102MongoDB shell version: 1.8.1connecting to: 192.168.1.102/testSun Apr 15 15:55:51 Error: couldn‘t connect to server 192.168.1.102 shell/mongo.js:81exception: connect failed
所以當服務端指定了連接埠後,用戶端必須要明確指定連接埠才可以正常訪問
[[email protected] bin]# ./mongo 192.168.1.102:28018MongoDB shell version: 1.8.1connecting to: 192.168.1.102:28018/test>
使用使用者名稱和密碼
MongoDB預設的啟動是不驗證使用者名稱和密碼的,啟動MongoDB後,可以直接用MongoDB串連上來,對所有的庫具有root許可權。所以啟動的時候指定參數,可以阻止用戶端的訪問和串連。
先來啟用系統的登入驗證模組,只需在啟動時指定auth參數即可
[[email protected] bin]# ./mongod --auth
本地用戶端串連一下看看效果
很奇怪,為什麼我們啟用了登入驗證模組,但我們登入時沒有指定使用者,為什麼還可以登入呢?在最初始的時候 MongoDB 都預設有一個 admin 資料庫(預設是空的)而 admin.system.users 中將會儲存比在其它資料庫中設定的使用者權限更大的使用者資訊。注意:當 admin.system.users 中沒有添加任何使用者時,即使 MongoDB 啟動時添加了 --auth參數,如果在除 admin 資料庫中添加了使用者,此時不進行任何認證依然可以使用任何操作,直到知道你在 admin.system.users 中添加了一個使用者。
兩種添加使用者方式
建立系統root使用者
在admin庫中新添一個使用者root:
[[email protected] bin]# ./mongoMongoDB shell version: 1.8.1connecting to: test> db.addUser("root","111"){"user" : "root","readOnly" : false,"pwd" : "e54950178e2fa777b1d174e9b106b6ab"}> db.auth("root","111")1>View Code
本地用戶端串連,但不指定使用者,結果如下:
[[email protected] bin]# ./mongoMongoDB shell version: 1.8.1connecting to: test> show collections;Sun Apr 15 16:36:52 uncaught exception: error: {"$err" : "unauthorized db:test lock type:-1 client:127.0.0.1","code" : 10057}>View Code
連上test庫了,但進一步操作時有異常,看來MongoDB允許未授權串連,但不能進行任何操作。
本地用戶端串連,指定使用者,結果如下:
[[email protected] bin]# ./mongo -u root -pMongoDB shell version: 1.8.1Enter password:connecting to: test> show collections;system.indexessystem.users>
View Code
看來指定了使用者名稱之後,訪問資料庫才是正常。
建立指定許可權使用者
MongoDB也支援為某個特定的資料來設定使用者,如我們為test庫設定一個唯讀使用者user_reader:
[[email protected] bin]# ./mongo -u root -pMongoDB shell version: 1.8.1Enter password:connecting to: test> show collections;system.indexessystem.users> use testswitched to db test> db.addUser("user_reader", "user_pwd", true){"user" : "user_reader","readOnly" : true,"pwd" : "0809760bb61ee027199e513c5ecdedc6"}>View Code
用戶端用此使用者來訪問:
[[email protected] bin]# ./mongo -u user_reader -pMongoDB shell version: 1.8.1Enter password:connecting to: test> show collections;system.indexessystem.users>
View Code
MongoDB整理筆記の安全訪問