[TOC]
### 注意
* 对MongoDB部署启用访问控制会强制执行身份验证,要求用户识别自己。当访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作。
* 启用访问控制后,请确保在admin数据库中拥有userAdmin或userAdminAnyDatabase角色的用户,该用户可以管理用户和角色。
### 未开启复制集的实例
以下过程首先将用户管理员添加到运行无访问控制的MongoDB实例,然后启用访问控制。
#### 启动MongoDB
#### 连接到实例
* 如:
~~~
mongo --port=27017
~~~
#### 创建用户管理员
* 在admin数据库中添加具有userAdminAnyDatabase角色的用户。例如:
~~~
use admin
db.createUser(
{
user: "admin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
~~~
然后断开连接
#### 重新启动具有访问控制的MongoDB实例
* 使用–auth命令行选项重新启动mongod实例,如果使用配置文件,则使用security.authorization设置。例如:
~~~
mongod --auth --port 27017
~~~
或者使用配置文件,增加参数:
~~~
security:
authorization: enabled //冒号后面需要空一格
~~~
* 连接后验证,例如:
~~~
use admin
db.auth("admin", "abc123" )
~~~
* 创建用户的数据库是该用户的身份验证数据库。虽然用户将对该数据库进行身份验证,但用户可以在其他数据库中担任角色;即用户的认证数据库不限制用户的特权。
### 开启复制集的实例
在副本集中执行密钥文件访问控制
1. 对于成员的内部认证,MongoDB可以使用密钥文件,密钥文件的内容作为成员的共享密码。密钥长度必须在6到1024个字符之间,并且只能包含base64集合中的字符
2. 密钥文件的内容在所有相互连接的mongod和mongos实例上必须相同。您必须将密钥文件存储在副本集的每个成员上。
3. 执行内部认证也强制执行用户访问控制
4. 密钥文件是最低限度的安全形式,最适用于测试或开发环境。
注意:执行访问控制的以下过程需要停止mongod服务
#### 创建一个密钥文件
* 使用密钥文件身份验证,副本集中的每个mongod实例使用密钥文件的内容作为共享密码,用于验证部署中的其他成员。可以使用您选择的任何方法生成密钥文件。例如,以下操作使用openssl生成密码文件,然后使用chmod来更改文件权限,以便仅为文件所有者提供读取权限
*
~~~
openssl rand -base64 753 > /data/mongo_key/keyfile
chmod 400 /data/mongo_key/keyfile
chown mongod.mongod -R /data/mongo_key
~~~
#### 将密钥文件复制到每个副本集成员
* 将密钥文件复制到托管副本集成员的每个服务器。确保运行mongod实例的用户是文件的所有者,并且可以访问密钥文件
#### 关闭副本集的所有成员
* 关闭复制集中的每个mongod,从次节点开始。直到副本集的所有成员都离线,包括任何仲裁者。主节点必须是最后一个成员关闭以避免潜在的回滚。要关闭mongod,请使用mongo shell连接每个mongod,并在admin数据库上发出db.shutdownServer():
~~~
use admin
db.shutdownServer()
~~~
#### 启动执行访问控制的副本集的每个成员
* 使用keyFile参数运行mongod同时强制内部身份验证和基于角色的访问控制。使用配置文件启动副本集中的每个mongod。
* 配置文件
如果使用配置文件,请将security.keyFile选项设置为keyfile的路径,
~~~
vi /etc/mongod.conf
security:
keyFile: /data/mongo_key/keyfile
~~~
* 启动mongod
```
service mongod start
```
#### 创建用户管理员(同未开启复制集的实例)
- CentOS运维手册
- CentOS6.9挂载额外的磁盘
- ACL(access control list)-权限控制
- 普通用户不能绑定80端口
- ssh8.1p1编译步骤
- 制作openssh8_1的rpm包
- 离线yum源维护
- 去除VIM中打开文件里有的^M字符
- Mysql运维手册
- CentOS6.9搭建Mariadb-Galera集群
- mysql编码报错
- haproxy代理mysql galera
- 常用sql
- MySQL通用知识点
- 修复断电损坏的MySQL数据表
- sync_binlog配置的分析
- Xtrabackup备份与恢复
- Innodb线程并发同步机制
- redo log
- 死锁分析
- 慢SQL分析
- nginx运维手册
- nginx日志分割
- proxy_set_header作用
- nginx优化
- url末尾不加/
- 负载均衡
- haproxy和nginx研究
- haproxy配置
- redis运维手册
- redis_5.0.8集群搭建
- Redis集群原理分析
- predixy的安装和配置
- redis优化
- NFS运维手册
- flock操作失败
- mongodb运维手册
- MongoDB开启用户认证
- shell编码规范
- HTTP
- HTTP的传输编码
- 性能分析
- java内存分析
- javaCPU分析