在我们之前的指南中,我们学习了如何在 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
,password
和authentication 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 身份验证