一、利用Docker部署
Redis、Mongdb、MySQL等數據庫必須開認證策略,以防被人攻擊破壞。
1、Docker版部署
因早期Mongodb默認不開啟認證策略,很多Mongdb數據庫被攻擊,后期官方對認證策略進行了增強。
經實際驗證MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD
這兩個參數,只有在Mongodb版本為3.6.20以上才生效,故使用Docker版Mongdb必須要用新版本才行(3.6.20以上)。
2、 啟動命令如下:
docker run -d -p 27017:27017 --name mongo_huadong -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=Yimi@2018 -v
/data/mongo_huadong/db:/data/db mongo:3.6.20
3、 新增用戶
use admin;
db.createUser( {
user: "admin",
pwd: "123456",
roles: [ {
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
},
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
} ]
});
4、 驗證
use admin;
db.auth('admin', '123456')
返回1 即為驗證成功
二、利用YUM安裝
早期的Mongdb開啟認證策略比較麻煩:先添加用戶,再修改配置文件開啟用戶認證,再重啟mongo服務(或者 添加用戶后,用mongod --auth命令啟動)。
鑒於Docker中的進程不能關閉,也就是mongodb沒發再容器里重啟,所以低版本mongodb不建議用Docker安裝
1、增加yum源
cat >> /etc/yum.repos.d/mongodb-org-3.2.repo << EOF
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
EOF
2、安裝指定版本Mongdb
sudo yum install -y mongodb-org-3.2.22 mongodb-org-server-3.2.22 mongodb-org-shell-3.2.22 mongodb-org-mongos-3.2.22 mongodb-org-tools-3.2.22
3、啟動
sudo service mongod start
4、增加用戶
use admin
db.createUser(
{
user: "admin",
pwd: "123456",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
5、修改配置文件打開認證
vim /etc/mongod.conf
security:
authorization: enabled
6、重啟Mongdb
sudo service mongod restart
7、進行驗證
use admin;
db.auth('admin', '123456')
返回1 即為驗證成功
8、報錯解決
如果賬號密碼正確還是認證失敗,客戶端連接不上,建議觀察日志,比如:
SCRAM-SHA-1 authentication failed ``for` `user1 on finddemo
這是因為 mongodb加入了SCRAM-SHA-1校驗方式,需要第三方工具配合進行驗證。
首先關閉認證,修改system.version文檔里面的authSchema版本為3,初始安裝時候應該是5。
> use admin
switched to db admin
> var schema = db.system.version.findOne({"_id" : "authSchema"})
> schema.currentVersion = 3
3
> db.system.version.save(schema)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })