sudo yum update -y确保CentOS系统为最新版本,修复已知安全漏洞。/etc/yum.repos.d/mongodb-org-4.2.repo,内容如下:[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
执行sudo yum install -y mongodb-org安装MongoDB。sudo systemctl start mongod && sudo systemctl enable mongod。编辑MongoDB配置文件/etc/mongod.conf,在security section添加以下内容以强制身份验证:
security:
authorization: enabled
保存后重启服务使配置生效:sudo systemctl restart mongod。
使用MongoDB Shell(mongo)切换至admin数据库,创建拥有root角色(超级管理员)的账户:
use admin
db.createUser({
user: "admin",
pwd: "YourStrongPassword123!", // 替换为包含大小写字母、数字和符号的强密码
roles: [{ role: "root", db: "admin" }]
})
退出Shell:exit。
使用firewalld开放MongoDB默认端口(27017),并限制仅允许可信IP访问:
sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
sudo firewall-cmd --reload
若需进一步限制源IP(如仅允许公司IP192.168.1.100访问),可添加富规则:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="27017" accept'
sudo firewall-cmd --reload
修改/etc/mongod.conf中的net section,将bindIp设置为仅允许本地连接(127.0.0.1)。若需远程访问,可添加特定IP(如192.168.1.100):
net:
bindIp: 127.0.0.1,192.168.1.100 # 多个IP用逗号分隔
port: 27017
重启服务使配置生效:sudo systemctl restart mongod。
使用OpenSSL生成自签名证书(生产环境建议使用CA签发的证书):
sudo mkdir -p /etc/ssl/mongodb
sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout /etc/ssl/mongodb/mongodb.key -out /etc/ssl/mongodb/mongodb.crt
sudo chmod 600 /etc/ssl/mongodb/mongodb.key
sudo cat /etc/ssl/mongodb/mongodb.key /etc/ssl/mongodb/mongodb.crt > /etc/ssl/mongodb/mongodb.pem
编辑/etc/mongod.conf,添加以下内容:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb/mongodb.pem
# 若使用CA签发的证书,取消以下注释并指定CA文件路径
# CAFile: /path/to/ca.crt
重启服务:sudo systemctl restart mongod。
编辑/etc/mongod.conf,在systemLog section添加以下内容以记录所有数据库操作:
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
verbosity: 1 # 1为基本日志,2为详细日志(根据需求调整)
重启服务:sudo systemctl restart mongod。
例如,为mydatabase数据库创建只读用户readonlyUser:
use mydatabase
db.createUser({
user: "readonlyUser",
pwd: "ReadOnlyPass123!",
roles: [{ role: "read", db: "mydatabase" }]
})
创建读写用户readwriteUser:
use mydatabase
db.createUser({
user: "readwriteUser",
pwd: "ReadWritePass123!",
roles: [{ role: "readWrite", db: "mydatabase" }]
})
若内置角色无法满足需求,可创建自定义角色。例如,创建允许在mydatabase的mycollection集合上执行find和aggregate操作的角色:
use admin
db.createRole({
role: "customDataAnalyzer",
privileges: [
{
resource: { db: "mydatabase", collection: "mycollection" },
actions: ["find", "aggregate"]
}
],
roles: []
})
将自定义角色分配给用户:
use admin
db.grantRolesToUser("readonlyUser", ["customDataAnalyzer"])
定期检查用户权限,确保符合当前业务需求:
// 查看用户权限详情
db.getUser("readonlyUser")
// 删除不再需要的用户
db.dropUser("oldUser")
sudo yum update mongodb-org
mongodump定期备份数据,存储至安全位置:mongodump --out /backup/mongodb_$(date +%F)