在MongoDB上启用身份验证

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

在Debian 10上安装MongoDB

在Ubuntu 20.04上安装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使用各种身份验证机制,例如;

  • 盐分挑战响应身份验证机制(SCRAM),这是默认的MongoDB身份验证机制。它将对照用户的身份验证提供的用户凭据 namepasswordauthentication database
  • x.509证书身份验证,使用x.509证书而不是用户名和密码对客户端进行身份验证。

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

创建MongoDB管理用户

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

mongo

如果从MongoDB Shell提示符检查,默认情况下不创建任何用户;

show users

或者

db.getUsers();

上面的命令不会显示任何结果。

要创建管理员用户,请切换为默认 行政 MongoDB数据库。

首先列出可用的数据库;

show dbs

样品输出;

admin   0.000GB
config  0.000GB
local   0.000GB

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

use admin

切换到admin数据库后,将以下命令粘贴到shell上以创建MongoDB admin用户。 确保根据需要替换管理员的用户名

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

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

在MongoDB上创建管理员用户的示例输出;

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

创建管理员用户后,退出数据库连接。

quit ()

在MongoDB上启用访问控制

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

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

打开文件进行编辑;

vim /etc/mongod.conf

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

#security:
security:
  authorization: enabled

保存并退出文件。

重新启动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

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

use admin

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

db.auth("kifarunixdemoAdmin")

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

mongo -u kifarunixdemoAdmin -p --authenticationDatabase admin

输入您的密码。

连接到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身份验证

其他教程

在Fedora 32/31/30上安装和配置用于OpenLDAP认证的SSSD

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

在MacOS X上通过OpenLDAP配置脱机身份验证

在MacOS X上配置OpenLDAP身份验证

Sidebar