如何在 Ubuntu 16.04 上保護 MongoDB


在本文中,我們將學習如何在 Ubuntu 16.04 上保護 Mongo DB。在以前的版本中,Mongo DB 容易受到自動化漏洞利用的攻擊,因為預設情況下沒有啟用身份驗證,任何使用者都可以與資料庫互動,建立、讀取、修改和銷燬資料庫及其內容,這是因為 Mongo DB 守護程序預設情況下可以監聽所有介面。

啟用身份驗證並新增管理員使用者

這個問題在 Mongo DB 3.x 版本之後的最新版本中得到了緩解,但是,身份驗證預設情況下仍然是停用的,因此任何使用者都可以完全訪問資料庫。為了保護它,我們將建立一個管理員使用者並啟用身份驗證,並使用管理員使用者測試身份驗證。

新增管理員使用者

要新增管理員使用者,我們首先需要連線到 Mongo shell。

$ mongo

當我們開啟 Mongo DB shell 時,它會顯示許多警告,表明資料庫未啟用訪問控制,並且對資料庫和配置的讀寫訪問不受限制。

Output:
MongoDB shell version v3.4.4
connecting to: MongoDB://127.0.0.1:27017
MongoDB server version: 3.4.4
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2017-05-16T12:33:46.819+0530 I STORAGE [initandlisten]
2017-05-16T12:33:46.819+0530 I STORAGE [initandlisten] ** WARNING: Using the XF                      S filesystem is strongly recommended with the WiredTiger storage engine2017-05-16T12:33:46.819+0530 I STORAGE [initandlisten] **       See http://d ochub.mongodb.org/core/prodnotes-filesystem
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** WARNING: Access contr ol is not enabled for the database.
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** Read and wri te access to data and configuration is unrestricted.
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** WARNING: /sys/kernel/ mm/transparent_hugepage/enabled is 'always'.
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** We suggest set ting it to 'never'
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** WARNING: /sys/kernel/ mm/transparent_hugepage/defrag is 'always'.
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** We suggest set ting it to 'never'
2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]
>

由於沒有限制管理員帳戶使用者名稱,因為許可權級別來自變數 userAdminAnyDatabase。資料庫管理員儲存憑據。

我們將選擇我們選擇的使用者名稱,並確保使用以下命令選擇安全密碼。

> use admin.
switched to db admin

切換資料庫後,我們將建立一個管理員使用者。

> db.createUser(
... {
...    user: "DBAdmin",
...    pwd: "DBAdmin'sSecurePassword",
...    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
...    }
... )

Output:
Successfully added user: {
                           "user" : "DBAdmin",
                           "roles" : [
         {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
         }
]
}
>

由於我們建立了一個名為 DBAdmin 的管理員使用者,並設定了安全密碼。

我們剛剛建立了一個管理員使用者,但在我們啟用 Mongo DB 配置中的身份驗證之前,它不會被要求。

為 MongoDB 啟用身份驗證

我們需要在位於 /etc 的配置檔案 mongod.conf 中啟用身份驗證,並重新啟動 Mongo DB 守護程序。

現在,我們將編輯 mongod.conf 檔案,並在 $security 部分進行修改。

$ sudo vi /etc/mongod.conf

配置檔案如下所示

# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
#processManagement:
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:

我們需要刪除 security 前面的註釋 (#) 以啟用該部分,並且我們需要新增授權設定,如下所示。

#processManagement − security −   authorization − “enabled” #operationProfiling − #replication − #sharding −

請注意,security 行沒有空格,authorization 行必須以兩個空格開頭。將這些行新增到配置檔案後,我們需要重新啟動 mongod 守護程序。

以下是重新啟動 MongoDB 服務的命令:

$ sudo systemctl restart mongod

重新啟動服務後,我們可以使用以下命令檢查 MongoDB 服務的狀態:

$ sudo systemctl status mongod
Output:
mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2017-05-16 12:52:09 IST; 48s ago
Docs: https://docs.mongodb.org/manual
Main PID: 3281 (mongod)
Tasks: 20
Memory: 33.3MCPU: 734ms
CGroup: /system.slice/mongod.service
└─3281 /usr/bin/mongod --quiet --config /etc/mongod.conf
May 16 12:52:09 ubuntu-16 systemd[1]: Started High-performance, schema-free document-oriented database.

驗證 MongoDB 上的身份驗證

首先,讓我們在沒有任何憑據的情況下連線到 MongoDB。

$ mongo

Output:
MongoDB shell version v3.4.4
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.4
>

現在,我們可以看到過去顯示的所有警告訊息都已解決,現在我們將透過嘗試連線到測試資料庫來測試身份驗證。

> show dbs
2017-05-16T12:56:17.306+0530 E QUERY [thread1] Error: listDatabases failed:{
      "ok" : 0,
      "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
      "code" : 13,
      "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:769:19
shellHelper@src/mongo/shell/utils.js:659:15
@(shellhelp2):1:1

我們可以看到,在沒有身份驗證的情況下,我們無法建立或使用資料庫,現在退出 shell 並嘗試使用身份驗證。

驗證管理員使用者訪問許可權

現在,嘗試使用管理員使用者身份驗證連線到管理員資料庫。以下是使用使用者身份驗證連線到資料庫的命令:

$ mongo -u DBAdmin -p --authenticationDatabase admin
MongoDB shell version v3.4.4
Enter password:
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.4
>show dbs
admin 0.000GB
local 0.000GB
>

在本文中,我們學習瞭如何透過新增管理員使用者並啟用身份驗證來保護 Mongo DB,因為預設設定下 Mongo DB 未啟用使用者身份驗證,任何使用者都可以建立、刪除和修改資料庫。

更新於:2020年1月23日

230 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告