一,修改啟動端口
mongo的默認端口為27017 如果啟用的是27017端口並且在公網上很容易被人攻擊,所以第一點我們要修改端口
sudo ./mongod --dbpath=/data/db --fork --port 29089 --logpath=/data/logs
我們現在啟動的是29089端口
啟動shell
$ ./mongo
報錯:
Failed to connect to 127.0.0.1:27017, reason: errno:61 Connection refused
這是是因為我們修改了端口,而默認連接的是27017的端口,所以我們進入shell時也要指定啟動服務似的端口
$ ./mongo --port 29089
這樣就可以進入了
二,用戶認證
mongodb默認是沒有管理賬戶的,需要開發人員添加管理員賬戶,在啟動mongo服務時添加身份認證才可以進入數據庫,所以我們需要做兩點:
- 添加管理員
- 啟動服務時時添加 auth 指令
mogodb 默認有兩個數據庫:
在我們初次安裝並啟動mongo服務后,進入shell管理可以看到已存在兩個數據庫,在執行show dbs時 會顯示以下兩個數據庫
- admin
- local
我們要在admin里添加用戶以便在進入數據庫時認證,我是在mac下操作,以下都是mac下的命令,下面演示整個用戶添加和認證的過程
1.檢查mongo服務是否開啟
$ ps -ef | grep mongo
未找到mongo啟動進程
2.啟動mongo服務
$ cd /usr/local/bin
$ ./mongod --dbpath=/data/db --fork --port 29089 --logpath=/data/logs
成功啟動mongo
3.進入shell管理后台
$ cd /usr/local/bin
$ ./mongo --port 29089
4.查看當前所有數據庫
$ show dbs
除了admin,local數據庫其他都是我業務上使用后建立的數據庫,可以看到我們直接就訪問到數據庫並且可以操作
5.在admin庫里添加管理員用戶
$ use admin
$ db.getUsers();
使用admin數據庫並檢查是否存在用戶
6 創建用戶
$ db.createUser({user:"leinov",pwd:"123456",roles:["root"]})
db.getUsers();
db.createUser()創建一個用戶,並分配角色,我們創建里一個超級管理員,這個角色可以對本機mongo實例內的所有數據庫做有效的讀寫操作,關於db.createUser()方法參考官方文檔 https://docs.mongodb.com/manual/reference/method/db.auth/
7 重新啟動服務並添加認證auth
$ sudo ./mongod --dbpath=/data/db --fork --port 29089 --logpath=/data/logs --auth
在啟動命令后面加上auth這樣在進入數據庫時就會開啟認證
8.重新進入shell后台
$ ./mongo--port29089
$ show dbs
提示沒有權限查看數據庫list
9.切換到admin數據庫驗證
$ use admin
$ db.auth({user:"leinov",pwd:"123456"})
db.auth()方法是驗證用戶的操作方法,返回值為0/1 1為驗證成功
10.再次查看數據庫
$ show dbs
完成端口修改和用戶認證基本上就可以保證數據庫的安全了,我自己的mongo也被黑了,網上其實還有很多裸奔的mongo數據庫,所以一定要給自己的mongo修改端口添加用戶認證保證安全。
3.0后的mongo很多方法都有變化,具體參考官方文檔 https://docs.mongodb.com/