天天看點

mongodb複制集開啟安全認證

之前我有一篇部落格寫的是“node.js通過權限驗證連接配接MongoDB”,這篇部落格上提到如何在啟動檔案中通過配置auth參數來開啟權限認證,但這種認證方式隻适合單機節點,當我們使用複制集時應該怎麼開啟權限認證來保證複制集的安全捏? 

先給大家看一下我在centos虛拟機上搭建的複制集 

mongodb複制集開啟安全認證

這和我之前的那篇部落格上展示的不是同一個複制集,因為昨天我在原來那台虛拟機上瞎幾把搞的時候改錯了一個配置檔案然後系統就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中執行下面的操作 

mongodb複制集開啟安全認證

這裡需要注意一下在第一次輸出的時候我們需要檢查它輸出的字元串中是否有不是baase64的字元。第二行指令是把上面生成的字元串輸入到keyFile中。由于之前所說,複制集對keyFile的權限有要求,最多到600,是以我們需要

1

然後我們把這個檔案複制到其他節點的安裝路徑中。 

然後我們到啟動檔案中配置參數 

mongodb複制集開啟安全認證

這裡我們需要注意最後一個參數keyFile,其值為之前我們生成的keyFile檔案的位址。由于我們配置了keyFile參數相當于就開啟了安全認證,是以就不必在配置auth參數了。 

最後我們再啟動複制集,在主節點中建立使用者,第一個建立的使用者必須在admin庫中建立,建立方式如下 

mongodb複制集開啟安全認證

之後不管在主節點還是從節點中,我們都需要在admin庫中通過db.auth()進行認證 

mongodb複制集開啟安全認證

以上就是配置複制集安全認證的全部過程,後面我将為大家介紹如何通過nodejs連接配接複制集。

=================================================================================

四、     增加安全認證機制KeyFile

4.1 叢集之間的安全認證

叢集之間的複制增加keyFile認證

<col>

#生成key

openssl rand -base64 745 &gt; /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&gt; use admin

switched to db admin

重新檢視從庫和叢集狀态都是正常。

五、     建立使用者和使用者資料庫

5.1 啟動認證

開啟了安全認證就可以開始對每個資料庫進行安全認證了,首先給使用者建立一個資料庫:

test_set:PRIMARY&gt; 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&gt;