名称: mongodb-security-admin 版本: “2.1.0” 描述: 掌握MongoDB安全、认证、授权、加密和备份。学习基于角色的访问控制、TLS/SSL、加密和灾难恢复。用于安全部署、管理用户或实施合规。 sasmp版本: “1.3.0” 绑定代理: 06-mongodb-security-administration 绑定类型: PRIMARY_BOND
生产级技能配置
能力:
- 认证设置
- 授权-rbac
- 加密配置
- TLS配置
- 审计日志
- 备份恢复
输入验证: 必需上下文: - 安全域 - 环境 可选上下文: - 合规框架 - 现有配置 - 威胁模型
输出格式: 配置: 对象 实施步骤: 数组 验证命令: 数组 安全检查清单: 数组
错误处理: 常见错误: - 代码: SEC001 条件: “认证失败” 恢复: “验证凭据,检查authSource,确认用户存在” - 代码: SEC002 条件: “TLS握手失败” 恢复: “验证证书有效性,检查CA链,确认加密套件支持” - 代码: SEC003 条件: “授权被拒” 恢复: “检查用户角色,验证数据库权限,审查RBAC配置”
先决条件: mongodb版本: “4.0+” 必需知识: - 用户管理 - 网络基础 安全要求: - “访问mongod配置” - “证书管理能力”
测试: 单元测试模板: | // 验证认证工作 const client = new MongoClient(uri, { auth: { username, password } }) await client.connect() const adminDb = client.db(‘admin’) const result = await adminDb.command({ connectionStatus: 1 }) expect(result.authInfo.authenticatedUsers).toHaveLength(1)
MongoDB安全与管理
掌握MongoDB安全和操作实践。
快速开始
启用认证
# 启用认证前创建管理员用户
mongod --dbpath /data --logpath /var/log/mongod.log
mongo
> use admin
> db.createUser({
user: 'admin',
pwd: 'securepassword',
roles: ['root']
})
# 启用认证后重启
mongod --auth --dbpath /data
认证
// 使用凭据连接
const client = new MongoClient(
'mongodb://admin:password@localhost:27017/?authSource=admin'
);
// 创建应用程序用户
db.createUser({
user: 'appuser',
pwd: 'apppassword',
roles: ['readWrite']
})
授权 (RBAC)
// 内置角色
/*
管理员角色:
- root: 完全访问
- dbAdmin: 数据库管理
- userAdmin: 用户管理
数据库角色:
- read: 只读访问
- readWrite: 读写访问
集群角色:
- clusterAdmin: 完全集群访问
- clusterManager: 集群监控
- clusterMonitor: 只读监控
*/
// 创建具有特定角色的用户
db.createUser({
user: 'analyst',
pwd: 'password',
roles: [{ role: 'read', db: 'analytics' }]
})
// 授予多个角色
db.grantRolesToUser('analyst', [
{ role: 'read', db: 'db1' },
{ role: 'readWrite', db: 'db2' }
])
自定义角色
// 创建自定义角色
db.createRole({
role: 'reportViewer',
privileges: [
{
resource: { db: 'analytics', collection: 'reports' },
actions: ['find']
}
],
roles: []
})
// 分配自定义角色
db.grantRolesToUser('analyst', [
{ role: 'reportViewer', db: 'admin' }
])
加密
TLS/SSL设置
# 生成自签名证书
openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes \
-out server.crt -keyout server.key
cat server.crt server.key > server.pem
# 启动MongoDB并启用TLS
mongod --tlsMode requireTLS \
--tlsCertificateKeyFile /path/to/server.pem \
--dbpath /data
# 使用TLS连接
mongo --tls --tlsCertificateKeyFile /path/to/client.pem \
mongodb://localhost:27017
静态加密
# 使用WiredTiger启用加密
mongod --encryptionCipherMode AES256-CBC \
--encryptionKeyFile /path/to/keyfile.key \
--dbpath /data
备份与恢复
备份方法
# 使用mongodump备份
mongodump --out /backup/`date +%Y%m%d`
# 备份特定数据库
mongodump --db myapp --out /backup/myapp
# 压缩备份
mongodump --archive=backup.archive --gzip
# 恢复
mongorestore /backup/
mongorestore --archive=backup.archive --gzip
使用快照进行时间点恢复
# 快照策略
# 1. 在副本次要节点上创建文件系统快照
# 2. 停止mongod
# 3. 将快照复制到备份
# 4. 重启mongod
# 5. 使用oplog进行时间点恢复
# 从快照恢复
# 1. 恢复文件系统快照
# 2. 启动mongod(自动恢复)
# 3. 验证数据完整性
审计日志
// 启用审计日志
// mongod --auditLog.destination file \
// --auditLog.format BSON \
// --auditLog.path /var/log/mongodb/audit.log
// 查看审计日志
db.adminCommand({
getParameter: 1,
auditLog: 1
})
// 配置审计过滤器
// --auditLog.filter '{ atype: "authenticate" }'
用户管理
// 列出用户
db.getUsers()
// 修改用户密码
db.changeUserPassword('username', 'newpassword')
// 移除用户
db.removeUser('username')
// 检查当前用户
db.runCommand({ connectionStatus: 1 })
Python示例
from pymongo import MongoClient
from pymongo.auth_mechanisms import MECHANISMS
# 使用认证连接
client = MongoClient(
'mongodb://user:password@localhost:27017/?authSource=admin'
)
# 创建用户
db = client['admin']
db.command('createUser', 'newuser',
pwd='password',
roles=['readWrite']
)
# 检查权限
db.command('usersInfo', 'newuser')
安全检查清单
✅ 在生产环境中启用认证 ✅ 使用强密码 ✅ 实施基于角色的访问控制 ✅ 启用TLS/SSL连接加密 ✅ 启用静态加密 ✅ 实施审计日志 ✅ 定期测试备份 ✅ 网络隔离(防火墙) ✅ IP白名单 ✅ 最小权限原则 ✅ 监控访问日志 ✅ 保持MongoDB更新