0%

開啟MongoDB認證權限

開啟MongoDB認證權限

之前有發生過mongodb資料庫被勒索的新聞,主要是因為舊版的mongodb設定上是可以被任何人連接的,如果沒有設定資料庫權限,基本上任何人只要知道資料庫的ip位置,就可以入侵。

新版的mongodb已經把漏洞補上,預設只有內網才能連接上,但就不能從外部連接進去,所以還是得手動更改讓外部也可以連接,並且加上資料庫權限,避免被攻擊。

加入帳號

先在terminal裡面輸入mongo進入mongo的CLI中,首先進入admin中

1
use admin

接著建立一個擁有root權限的使用者,這邊也可以將root改成userAdminAnyDatabase,userAdminAnyDatabase可以讓此使用者管理各個資料庫,但不能對資料庫進行讀寫,擁有的權限沒有root大,root是所有功能都可以使用

1
2
3
4
5
6
7
8
db.createUser({
user:"userID",
pwd:"userPwd",
roles:[{
role:"root",
db:"admin"
}]
})

之後會顯示建立成功,如果成功的話可以輸入以下指令進行登入,返回值為1表示登入成功

1
db.auth("userID", "userPwd")

接著進入要建立權限的資料庫,例如這次要為名為test的資料庫建立權限,首先就是先切換到test資料庫,如果原先沒有建立資料庫的話,mongodb也會自動幫你建立

1
use test

切換後跟前面建立擁有root權限的步驟一樣,這邊的roles可以看到第一個role是表示此使用者是test資料庫的擁有者,第二個role是他對test擁有讀寫的能力

1
2
3
4
5
6
7
8
9
10
11
db.createUser({
user:"testAdmin",
pwd:"test123",
roles:[{
role:"dbAdmin",
db:"test"
},{
role:"readWrite",
db:"test"
}]
})

創建成功後一樣測試可否正常登入,如果返回值為1表示登入成功

1
db.auth("testAdmin", "test123")

讓mongodb預設開啟認證

要讓後台的mongodb預設就開啟認證,必須先修改配置文件,配置文件在

1
/etc/mongodb.conf

接著更改以下內容,這樣就可以讓外網連進資料庫,並且開啟安全認證

1
2
3
bind_ip = 0.0.0.0
security:
authorization: enabled

更改完之後要重新啟動一下後台的mongodb,讓設定生效

1
sudo systemctl restart mongodb

MongoDB 3.4.2 添加用戶、設置權限
MongoDB啟用權限機制
All-Database Roles