MongoDBは非リレーショナルデータベースであり、そのデータベースセキュリティはmysql5.7より前のバージョンと非常に似ています。データベースがインストールされたばかりです。
ソフトウェアと例が初期化された後、データベースはまったく安全ではありません。つまり、新しく初期化されたmongodbには、データがあればセキュリティ上の制限はありません。
ライブラリはパブリックネットワーク上にあり、どのマシンもインターネットを介してmongoの任意のクライアントを介してデータベースに接続できます。したがって、MongoDBで本番環境に移行します
以前は、MongoDBをセキュリティの観点から強化する必要がありました。ここでは、1つのマスター、1つのスレーブ、1つのアービトレーションを備えたMongodbアーキテクチャのユーザーパスワードを紹介します
変更します。
1. mongodbデータベースクラスターのメインライブラリにログインし、スーパー管理ユーザーを作成します
db.createUser(
{{
ユーザー: "firstset"、
pwd: "firstset"、
役割:[{役割: "userAdminAnyDatabase"、db: "管理者"}]
}
);
2. zhulのパスワードを変更し、mogodbプロセスを確認し、ポート番号に注意します。
ps -ef | grep mongod
モンゴ108361 0 09:02?00:00:03 mongod --dbpath / opt / mongo / data / dns_repset1 --port 10001 --replSet firstset --oplogSize 512 --rest --fork --logpath /opt/mongo/logs/firstset/firstset.log --logappend --nojournal --directoryperdb --keyFile / opt / mongo / keyfile / keyfile
mongo 10997 9767 0 09:09 pts / 3 00:00:00 grep --color = auto mongod
3. zhulのパスワードを変更し、現在のデータベースがパスワードなしでログインしているかどうかを確認します
[mongo @ mongo1 keyfile] $ mongo --port 10001
MongoDBシェルバージョン:3.2.11-49-g52b68fa
接続先:127.0.0.1:10001 /テスト
firstset:PRIMARY> show dbs
2019-10-24T09:09:31.298 + 0800 E QUERY [thread1]エラー:listDatabasesが失敗しました:{
「OK」:0、
"errmsg": "管理者がコマンド {listDatabases:1.0}を実行することを許可されていません"、
「コード」:13
}:
_getErrorWithCode @ src / mongo / shell / utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1
firstset:PRIMARY> exit
さようなら
検証を通じて、現在のデータベースはキーファイルのセキュリティ認証検証を試みました。パスワードなしのログインはコマンドの実行を拒否します。
4. zhulのパスワードを変更します。変更したユーザーのパスワードがわかっている場合は、アカウントパスワードを使用してログインするか、キーファイルのセキュリティ制限をキャンセルできます。
パスワードなしでログインした後、関連するユーザーのパスワードを変更し、キーファイルのセキュリティ認証を有効にします
[mongo @ mongo1 keyfile] $ mongo -u firstset -p firstset --port 10001
MongoDBシェルバージョン:3.2.11-49-g52b68fa
接続先:127.0.0.1:10001 /テスト
サーバーには起動時の警告があります:
2019-10-24T09:02:45.827 + 0800 I CONTROL [main] **警告:-restは--httpinterfaceなしで指定されています。
2019-10-24T09:02:45.827 + 0800 I CONTROL [main] ** httpインターフェースを有効にする
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten]
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] **警告:サーバーはWebサーバーインターフェイスとアクセス制御で起動されます。
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] ** Webインターフェイス(rest、httpinterface、jsonp)は安全ではありません
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] **であり、下位互換性のために必要な場合を除いて無効にする必要があります。
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten]
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten]
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] **警告:/ sys / kernel / mm / transparent_hugepage / enabledは「常に」です。
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] **「never」に設定することをお勧めします
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten]
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] **警告:/ sys / kernel / mm / transparent_hugepage / defragは「常に」です。
2019-10-24T09:02:46.024 + 0800 I CONTROL [initandlisten] **「never」に設定することをお勧めします
2019-10-24T09:02:46.024 + 0800 I CONTROL [initandlisten]
firstset:PRIMARY> show dbs;
管理者0.000GB
dns_testdb 0.004GB
ローカル0.008GB
firstset:PRIMARY> db.updateUser( "firstset"、{pwd: "rootroot"});
firstset:PRIMARY> exit
さようなら
5.パスワードの変更を確認します
-間違ったユーザー名またはパスワードのログインが拒否されました
[mongo @ mongo1 keyfile] $ mongo -u firstset -p firstset --port 10001
MongoDBシェルバージョン:3.2.11-49-g52b68fa
接続先:127.0.0.1:10001 /テスト
2019-10-24T09:11:35.167 + 0800 E QUERY [thread1]エラー:認証に失敗しました。:
DB.prototype._authOrThrow @ src / mongo / shell / db.js:1441:20
@(auth):6:1
@(auth):1:2
例外:ログインに失敗しました
-正しいユーザー名とパスワードでログインした後、正常に操作できます
[mongo @ mongo1 keyfile] $ mongo -u firstset -p rootroot --port 10001
MongoDBシェルバージョン:3.2.11-49-g52b68fa
接続先:127.0.0.1:10001 /テスト
サーバーには起動時の警告があります:
2019-10-24T09:02:45.827 + 0800 I CONTROL [main] **警告:-restは--httpinterfaceなしで指定されています。
2019-10-24T09:02:45.827 + 0800 I CONTROL [main] ** httpインターフェースを有効にする
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten]
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] **警告:サーバーはWebサーバーインターフェイスとアクセス制御で起動されます。
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] ** Webインターフェイス(rest、httpinterface、jsonp)は安全ではありません
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] **であり、下位互換性のために必要な場合を除いて無効にする必要があります。
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten]
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten]
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] **警告:/ sys / kernel / mm / transparent_hugepage / enabledは「常に」です。
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] **「never」に設定することをお勧めします
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten]
2019-10-24T09:02:46.023 + 0800 I CONTROL [initandlisten] **警告:/ sys / kernel / mm / transparent_hugepage / defragは「常に」です。
2019-10-24T09:02:46.024 + 0800 I CONTROL [initandlisten] **「never」に設定することをお勧めします
2019-10-24T09:02:46.024 + 0800 I CONTROL [initandlisten]
firstset:PRIMARY> show dbs;
管理者0.000GB
dns_testdb 0.004GB
ローカル0.008GB
firstset:PRIMARY> use admin
データベース管理者に切り替えました
firstset:PRIMARY>コレクションを表示します。
system.users
system.version
firstset:PRIMARY> db.system.users.find();
{"_id": "test.firstset"、 "user": "firstset"、 "db": "test"、 "credentials":{"SCRAM-SHA-1":{"iterationCount":10000、 "salt" : "ISdrb4a3Cc0A59vXEUxjOg =="、 "storedKey": "qPn44VuZrJ6QwWzOMBq90vZ5eAo ="、 "serverKey": "rz + CDSlpXHKvUDGg0PCnG2GZCjk ="}}、 "roles":[" }]}
firstset:PRIMARY> dns_testdbusedns_testdbを使用します
dbdns_testdbに切り替えました
firstset:PRIMARY>コレクションを表示します。
test_collection
firstset:PRIMARY> db.test_collection.findOne();
{{
"_id":ObjectId( "5d8434a5b138ddafc446e13b")、
「名前」:「牛」、
"user_id":48149、
「ブール値」:false、
"added_at":ISODate( "2019-09-20T02:08:37.116Z")、
「番号」:1743
}
firstset:PRIMARY>
firstset:PRIMARY> rs.status();
{{
"set": "firstset"、
"日付":ISODate( "2019-10-24T01:13:15.006Z")、
"myState":1、
「用語」:NumberLong(7)、
"heartbeatIntervalMillis":NumberLong(2000)、
「メンバー」:[
{{
"_id":0、
"名前": "192.168.192.251:10001"、
「健康」:1、
「状態」:1、
"stateStr": "PRIMARY"、
「稼働時間」:630、
"最適な": {
"ts":タイムスタンプ(1571879490、1)、
"t":NumberLong(7)
}、
"OptimalDate":ISODate( "2019-10-24T01:11:30Z")、
"electionTime":タイムスタンプ(1571879010、1)、
"electionDate":ISODate( "2019-10-24T01:03:30Z")、
"configVersion":1、
「自己」:真
}、
{{
"_id":1、
"名前": "192.168.192.252:10001"、
「健康」:1、
「状態」:2、
"stateStr": "SECONDARY"、
「稼働時間」:566、
"最適な": {
"ts":タイムスタンプ(1571879490、1)、
"t":NumberLong(7)
}、
"OptimalDate":ISODate( "2019-10-24T01:11:30Z")、
"lastHeartbeat":ISODate( "2019-10-24T01:13:13.320Z")、
"lastHeartbeatRecv":ISODate( "2019-10-24T01:13:13.259Z")、
"pingMs":NumberLong(0)、
"syncingTo": "192.168.192.251:10001"、
"configVersion":1
}、
{{
"_id":2、
"名前": "192.168.192.250:10001"、
「健康」:1、
「状態」:7、
"stateStr": "ARBITER"、
「稼働時間」:593、
"lastHeartbeat":ISODate( "2019-10-24T01:13:13.301Z")、
"lastHeartbeatRecv":ISODate( "2019-10-24T01:13:13.185Z")、
"pingMs":NumberLong(0)、
"configVersion":1
}
]、
「OK」:1
}
firstset:PRIMARY>
MongoDB keyFile認証設定については、以下を参照してください。
http://blog.itpub.net/29357786/viewspace-2130594/