之前我有一篇博客寫的是“node.js通過權限驗證連接MongoDB”,這篇博客上提到如何在啟動文件中通過配置auth參數來開啟權限認證,但這種認證方式只適合單機節點,當我們使用復制集時應該怎么開啟權限認證來保證復制集的安全捏?
先給大家看一下我在centos虛擬機上搭建的復制集
這和我之前的那篇博客上展示的不是同一個復制集,因為昨天我在原來那台虛擬機上瞎幾把搞的時候改錯了一個配置文件然后系統就GG了。。。。。於是今天我又重新裝了一遍。
上面展示的五個文件夾分別是五個數據庫的安裝路徑,文件夾名后面的數字是端口號。27017是priority最高的一個,27018、27019為普普通通的節點,27020為延時300秒的從節點,27021為投票節點。
那么要開啟復制集的安全認證首先需要關閉全部節點,而且在此之前不應該對某個節點使用單機節點的認證方式,即不可以在某個節點的啟動文件中配置auth=true且在該節點里創建用戶。因為這樣子做只適合單機節點,在復制集中這樣做會導致該節點發現不了復制集中的其他節點,因為沒有權限訪問。復制集的安全認證需要通過配置keyfile文件的方式進行。
接下來我們需要在每個節點的安裝路徑下新建一個keyFile文件,文件中的具體內容其實就是一行字符串,但復制集對keyFile文件有所要求
1.內容:以base64編碼集中中的字符進行編寫,即字符串只能包含a-z、A-Z、+、/
2.長度不能超過1000字節
3.權限最多到600
那么如何高效且高逼格生成一個合適的keyFile文件呢?
有這樣一個方法分享給大家,我們在mongo27017中執行下面的操作
這里需要注意一下在第一次輸出的時候我們需要檢查它輸出的字符串中是否有不是baase64的字符。第二行命令是把上面生成的字符串輸入到keyFile中。由於之前所說,復制集對keyFile的權限有要求,最多到600,所以我們需要
chmod 600 keyFile
- 1
然后我們把這個文件復制到其他節點的安裝路徑中。
然后我們到啟動文件中配置參數
這里我們需要注意最后一個參數keyFile,其值為之前我們生成的keyFile文件的地址。由於我們配置了keyFile參數相當於就開啟了安全認證,所以就不必在配置auth參數了。
最后我們再啟動復制集,在主節點中創建用戶,第一個創建的用戶必須在admin庫中創建,創建方式如下
之后不管在主節點還是從節點中,我們都需要在admin庫中通過db.auth()進行認證
以上就是配置復制集安全認證的全部過程,后面我將為大家介紹如何通過nodejs連接復制集。
=================================================================================
四、 增加安全認證機制KeyFile
4.1 集群之間的安全認證
集群之間的復制增加keyFile認證
#生成key openssl rand -base64 745 > /data/mongo_set/usercenter/30010/mongodb-keyfile chmod 600 /data/mongo_set/usercenter/30010/mon-keyfile # 該key的權限必須是600 |
將該key放到集群中機器的每一台上,記住必須保持一致,權限設置成600;
4.2 修改配置
在mongodb.conf啟動配置文件中增加配置項
#安全認證機制 keyFile=/data/mongo_set/test_set/30010/mon-keyfile |
4.3 主庫配置用戶
也可后面配置,開啟keyfile認證就默認開啟了auth認證了,為了保證后面可以登錄,我提前創建了用戶:
先創建管理員賬戶 db.createUser( { user:"admin", pwd:"xxxxxx", roles:[{role:"userAdminAnyDatabase",db:"admin"}] } ); db.createUser( { user: "root", pwd: "xxxxxxx", roles: [ { role: "root", db: "admin" } ] }); #認證用戶 db.auth("admin","xxxxxxx") db.auth("root","xxxxxxx") |
4.4 重啟進入
重新啟動mongodb,記住重新啟動時候,keyfile的指定如果沒有在配置文件中配置,就必須啟動時候使用參數keyfile指定,關閉順序注意下,mongodb集群有自動切換主庫功能,如果先關主庫,主庫就切換到其它上面去了,這里預防主庫變更,從庫關閉后再關閉主庫。
mongo 10.10.1.163:30010/admin -u root –p 2017-03-10T20:08:32.116+0800 I CONTROL [initandlisten] test_set:PRIMARY> use admin switched to db admin |
重新查看從庫和集群狀態都是正常。
五、 創建用戶和用戶數據庫
5.1 啟動認證
開啟了安全認證就可以開始對每個數據庫進行安全認證了,首先給用戶創建一個數據庫:
test_set:PRIMARY> use user_test switched to db user_test mongodb創建數據庫直接use即可,此時show dbs是看不到該庫的,需要插入一條數據才會現實出來,這里不演示; |
創建用戶數據庫的用戶:
db.createUser( { user: “test_user", pwd: "xxxxxx", roles: [ { role: "readWrite", db: "user_test" } ] } ); |
創建完成會顯示成功,可以用db.system.users.find()查看所有用戶驗證用戶是否存在;
5.2 驗證用戶登錄
#client操作 mongo 10.10.1.163:30010/user_test –u user_test –p MongoDB shell version v3.4.2 Enter password: connecting to: mongodb://192.168.1.163:30010/user_center MongoDB server version: 3.4.2 user_test:PRIMARY> |
轉自:https://blog.csdn.net/wopelo/article/details/73004216