在 MongoDB 上启用身份验证

在我们之前的指南中,我们学习了如何在 Ubuntu 或 Debian 系统上安装 MongoDB;

在 Debian 10 上安装 MongoDB

在 Ubuntu 20.04 上安装 MongoDB

默认情况下,自托管 MongoDB 默认不强制执行用户身份验证。 例如,当您使用命令行从命令行连接到 MongoDB 时 mongo 或命令 mongo mongodb://127.0.0.1:27017,您将在不提示身份验证的情况下进行连接。

mongo

或者

mongo mongodb://127.0.0.1:27017

这会让您直接进入 MongoDB shell 提示符。

MongoDB shell version v4.4.4 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("e2542d07-93fe-4621-af6d-8894f1899ee3") } MongoDB server version: 4.4.4 --- ... --- >

这基本上意味着,任何可以访问系统的人都可以对 MongoDB 数据库做任何可能的事情,因为没有实施任何限制。

例如,一次可以列出数据库;

show dbs
admin   0.000GB config  0.000GB local   0.000GB

在 MongoDB 上启用身份验证

可以实施多种安全功能来保护 MongoDB 部署。 其中一项功能是能够通过强制执行用户身份验证来启用 MongoDB 访问控制。

身份验证是验证连接到 MongoDB 的用户身份的过程。

MongoDB 使用各种身份验证机制,例如;

  • Salted Challenge Response Authentication Mechanism (SCRAM),这是默认的 MongoDB 身份验证机制。 它根据用户的身份验证提供的用户凭据 name, passwordauthentication database.
  • x.509 证书身份验证,使用 x.509 证书而不是用户名和密码对客户端进行身份验证。

在本指南中,我们将学习如何使用 SCRAM 方法在 MongoDB 上启用身份验证,这涉及使用用户名和密码来验证用户身份。

创建 MongoDB 管理用户

首先,连接到 MongoDB 实例并创建一个 MongoDB 管理用户。

mongo

如果您从 MongoDB shell 提示符检查,默认情况下不会创建用户;

show users

或者

db.getUsers();

上面的命令不打印任何结果。

创建一个 admin 用户,切换到默认 admin MongoDB 数据库。

首先列出可用的数据库;

show dbs

样本输出;

admin   0.000GB config  0.000GB local   0.000GB

接下来,从 shell 提示符运行以下命令以切换到 MongoDB 默认 admin 数据库;

use admin

一旦你切换到 admin 数据库,将下面的命令粘贴到 shell 上以创建 MongoDB admin 用户。 请务必根据需要替换管理员的用户名.

db.createUser(   {     user: "kifarunixdemoAdmin",     pwd: passwordPrompt(),     roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]   } )

按 Enter 一旦你粘贴了上面的命令调用。 系统将提示您输入密码。 如果您需要以明文形式显示密码,只需替换 passwordPrompt() 和 ”your password“。

创建一个示例输出 admin MongoDB 上的用户;

Successfully added user: { 	"user" : "kifarunixdemoAdmin", 	"roles" : [ 		{ 			"role" : "userAdminAnyDatabase", 			"db" : "admin" 		}, 		"readWriteAnyDatabase" 	] }

一旦你创建了一个 admin 用户,退出数据库连接;

quit ()

在 MongoDB 上启用访问控制

MongoDB 提供了一个选项, security.authorization,用于启用或禁用基于角色的访问控制 (RBAC)。

要启用此选项,请编辑 MongoDB 配置文件, /etc/mongod.conf,并将此选项的值设置为 enabled.

打开文件进行编辑;

vim /etc/mongod.conf

取消注释该行, #security:, 通过删除该行开头的 # 并将其设置为跟随;

#security: security:   authorization: enabled 

Save 并退出文件。

重启MongoDB服务;

systemctl restart mongod

验证 MongoDB 身份验证

接下来,要验证身份验证是否有效,请连接到 MongoDB;

mongo

尝试列出可用的数据库用户;

show users

你会得到这样的错误 usersInfo requires authentication;

uncaught exception: Error: command usersInfo requires authentication : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/db.js:1659:15 [email protected]/mongo/shell/utils.js:914:9 [email protected]/mongo/shell/utils.js:819:15 @(shellhelp2):1:1

要以用户身份进行身份验证,请切换到 admin 数据库;

use admin

接下来,运行下面的命令以上面创建的管理用户身份登录(相应地替换用户名);

db.auth("kifarunixdemoAdmin")

同样,您可以从命令行直接对特定数据库进行身份验证;

mongo -u kifarunixdemoAdmin -p --authenticationDatabase admin

Enter 你的密码。

连接到 MongoDB 后,根据需要运行命令。 例如列出可用用户;

show users
{ 	"_id" : "admin.kifarunixdemoAdmin", 	"userId" : UUID("b270c458-fb3b-425c-ad87-fdeb0e984a27"), 	"user" : "kifarunixdemoAdmin", 	"db" : "admin", 	"roles" : [ 		{ 			"role" : "userAdminAnyDatabase", 			"db" : "admin" 		}, 		{ 			"role" : "readWriteAnyDatabase", 			"db" : "admin" 		} 	], 	"mechanisms" : [ 		"SCRAM-SHA-1", 		"SCRAM-SHA-256" 	] }

您可以进一步创建数据库以及相应的用户和角色。

这只是标志着我们关于如何在 MongoDB 上启用身份验证的教程的结束。

参考

MongoDB 认证

为 OpenLDAP 身份验证安装和配置 SSSD Fedora 32/31/30

在 pfSense 上配置 Squid 代理 OpenLDAP 身份验证

在 MacOS X 上通过 OpenLDAP 配置离线身份验证

在 MacOS X 上配置 OpenLDAP 身份验证