mongodb 创建keyfile

在 MongoDB 中,keyFile 是用于副本集成员间内部认证的密钥文件。它是一个包含随机字符串的文件,所有副本集成员必须使用相同的 keyFile 进行通信。以下是创建和配置 keyFile 的详细步骤。

创建 KeyFile 的步骤

1. 生成随机字符串

使用以下命令生成一个随机字符串(建议至少 6 字节长度):

openssl rand -base64 756

-base64 756:生成一个长度为 756 字节的 Base64 编码字符串。
输出示例:

c3VwZXJzZWNyZXRrZXlmaWxlCg==

2. 将字符串保存到文件

将生成的字符串保存到一个文件中(例如 /etc/mongo-keyfile):

sudo sh -c "openssl rand -base64 756 > /etc/mongo-keyfile"

3. 设置文件权限

确保 keyFile 的权限正确,只有 mongod 用户可以读取该文件:

sudo chmod 600 /etc/mongo-keyfile
sudo chown mongod:mongod /etc/mongo-keyfile

4. 验证文件内容

确认文件内容是否正确:

sudo cat /etc/mongo-keyfile

配置 KeyFile

1. 修改 MongoDB 配置文件

在每个副本集成员的 /etc/mongod.conf 文件中添加或更新以下内容:

security:
  keyFile: /etc/mongo-keyfile

2. 分发 KeyFile

将生成的 keyFile 分发到所有副本集成员的相同路径(如 /etc/mongo-keyfile),并确保每个节点上的权限正确。

启用身份验证

1. 启用授权

在 /etc/mongod.conf 中启用身份验证:

security:
  authorization: enabled
  keyFile: /etc/mongo-keyfile

2. 重启 MongoDB

在每个副本集成员上重启 MongoDB 服务:

sudo systemctl restart mongod

创建管理员用户

1. 临时禁用身份验证

如果尚未创建管理员用户,可以暂时注释掉 security.authorization 并重启 MongoDB:

扫描二维码关注公众号,回复: 17814357 查看本文章
# security:
#   authorization: enabled

2. 连接到 MongoDB

使用 mongo shell 连接到 MongoDB:

mongo --host <hostname> --port 27017

3. 创建管理员用户

在 admin 数据库中创建管理员用户:

use admin
db.createUser({
    
    
  user: "admin",
  pwd: "your_password",
  roles: [ {
    
     role: "root", db: "admin" } ]
})

4. 重新启用身份验证

重新启用 security.authorization 并重启 MongoDB。

验证 KeyFile 和身份验证

1. 检查副本集状态

连接到主节点并检查副本集状态:

rs.status()

确保所有成员的状态正常,并且能够相互通信。

2. 测试身份验证

使用管理员用户连接到 MongoDB,确保身份验证正常工作:

mongo --host <hostname> --port 27017 -u admin -p your_password --authenticationDatabase admin

注意事项
KeyFile 内容一致性:
所有副本集成员必须使用相同的 keyFile 文件内容。
如果内容不一致,成员间将无法建立信任关系。
文件权限:
确保 keyFile 的权限为 600,并且所有者为 mongod 用户。
安全性:
不要将 keyFile 文件暴露在公共网络中。
定期备份 keyFile,以防丢失。
防火墙规则:
确保副本集成员间的网络通信未被防火墙阻止。

通过以上步骤,可以成功创建和配置 keyFile,并启用 MongoDB 副本集的身份验证功能。如果有其他问题,请随时告诉我!