mongodb 學習之——Linux 下MongoDB 單機與集羣的安全認證

 

1、概述

MongoDB 默認是沒有帳號的,能夠直接鏈接,無須身份驗證。實際項目中確定是要權限驗證的,不然後果不堪設想。從2016年開始 發生了多起MongoDB黑客贖金事件,大部分MongoDB安全問題 暴露出了安全問題的短板實際上是用戶,首先用戶對於數據庫的安全不重視,其次用戶在使用過程當中可能沒有養成按期備份的好習慣,最後是企業可能缺少有經驗和技術的專業人員。因此對MongoDB進行安全認證是必需要作的mongodb

2、用戶相關操做

2-1 切換到admin數據庫對用戶的添加

use admin
db.createUser(
{
user: "帳號",
pwd: "密碼",
roles: [
{ role: "角色", db: "安全認證的數據庫" },
{ role: "角色", db: "安全認證的數據庫" }
 ]
}
)

user:建立的用戶名稱,如 admin、root 、lagou
pwd:用戶登陸的密碼
roles:爲用戶分配的角色,不一樣的角色擁有不一樣的權限,參數是數組,能夠同時設置多個
role:角色,MonngoDB 已經約定好的角色,不一樣的角色對應不一樣的權限 後面會對role作詳細解釋
db:數據庫實例名稱,如 MongoDB 4.0.2 默認自帶的有 admin、local、config、test 等,即爲哪一個數
據庫實例 設置用戶shell

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

2.2 修改密碼

db.changeUserPassword( 'root' , 'rootNew' );

2.3 用戶添加角色

db.grantRolesToUser( '用戶名' , [{ role: '角色名' , db: '數據庫名'}])

 


2.4 以auth 方向啓動mongod

./bin/mongod -f conf/mongo.conf --auth
(也能夠在mongo.conf 中添加auth=true 參數)


2.5 驗證用戶

db.auth("帳號","密碼")

2.6刪除用戶

db.dropUser("用戶名")

2.7 角色

數據庫內置的角色數據庫

//通常設置

read:容許用戶讀取指定數據庫 readWrite:容許用戶讀寫指定數據庫

//高級設置,擁有一下這些全權限的用戶,至關於沒有安全認證,權限過高了
dbAdmin:容許用戶在指定數據庫中執行管理函數,如索引建立、刪除,查看統計或訪問 system.profile userAdmin:容許用戶向system.users集合寫入,能夠找指定數據庫裏建立、刪除和管理用戶 clusterAdmin:只在admin數據庫中可用,賦予用戶全部分片和複製集相關函數的管理權限 readAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀權限 readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀寫權限 userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限 dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的dbAdmin權限 root:只在admin數據庫中可用。超級帳號,超級權限 dbOwner:庫擁有者權限,即readWrite、dbAdmin、userAdmin角色的合體

各個類型用戶對應的角色

數據庫用戶角色:read、readWrite
數據庫管理角色:dbAdmin、dbOwner、userAdmin
集羣管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
備份恢復角色:backup、restore;
全部數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase
超級用戶角色:root
這裏還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、
userAdminAnyDatabase)

3、單機安全認證明現流程

3.1. 建立管理員

MongoDB 服務端開啓安全檢查以前,至少須要有一個管理員帳號,admin 數據庫中的用戶都被視爲管理員,若是 admin 庫沒有任何用戶的話,即便在其餘數據庫中建立了用戶,啓用身份驗證,默認的鏈接方式依然會有超級權限,即仍然能夠不驗證帳號密碼照樣能進行 CRUD,安全認證至關於無效。數組

  • 鏈接到MongoDB 
./bin/mongo --port 57017
  • 切換到admin數據庫對用戶的添加

>use admin
switched to db admin
> db
admin
> db.createUser(
... {
... user:"root",
... pwd:"123456",
... roles:[{role:"root",db:"admin"}]
... })

 

 

 

  •  驗證(無權訪問)

 

 

  •    認證訪問

 

 

 3.2 建立普通用戶

    testdb 本身新建的數據庫,沒安全認證以前能夠隨意 CRUD,其他的都是 mongoDB 4.0.2 自帶的數據庫,安全

 

即便建立用戶以後依然是能夠隨意 CRUD()函數

 

 

 

 

 關閉 MongoDB 服務端,以後服務端會以安全認證方式進行啓動spa

> use admin
switched to db admin
> db.shutdownServer()
server should be down...

 

 

4、 集羣的安全認證

4.1開啓安全認證以前 進入路由建立管理員和普通用戶

  參考單機認證建立用戶3d

 

 

 4.2關閉全部的配置節點 分片節點 和 路由節點

安裝psmisc
yum install psmisc
安裝完以後可使用killall 命令 快速關閉多個進程
killall mongod

 

 

 4.3 生成密鑰文件 並修改權限

openssl rand -base64 756 > data/mongodb/testKeyFile.file chmod 600 data/mongodb/testKeyFile.file

 

 

4.4 17017~17019.conf配置節點集羣和(37017-37019.conf)(47017-47019.conf)分片節點集羣開啓安全認證和指定密鑰文件

在文件夾shard_cluster 下 mkdir  /data/mongodb -prest

auth=true keyFile=data/mongodb/testKeyFile.file

4.5  在路由配置文件中 設置密鑰文件27017

keyFile=data/mongodb/testKeyFile.file

4.6 啓動全部的配置節點 分片節點 和 路由節點 使用路由進行權限驗證

能夠編寫一個shell 腳本 批量啓動 startup.sh  ,受權  chmod +x  startup.shcode

./bin/mongod -f mongo_17017.conf
./bin/mongod -f mongo_17018.conf
./bin/mongod -f mongo_17019.conf
./bin/mongod -f shard/shard1/shard1_37017.conf
./bin/mongod -f shard/shard1/shard1_37018.conf
./bin/mongod -f shard/shard1/shard1_37019.conf
./bin/mongod -f shard/shard2/shard2_47017.conf
./bin/mongod -f shard/shard2/shard2_47018.conf
./bin/mongod -f shard/shard2/shard2_47019.conf
./bin/mongos -f route/route_27017.conf

4.7 啓動

./startup.sh

 

 

 

 

 

 

 

                                                               down......................................................................................

相關文章
相關標籤/搜索