Ubuntu16.04でMongoDBを保護する方法
この記事では、Ubuntu16.04でMongoDBを保護する方法を学習します。以前のバージョンでは、Mongo DBは自動化されたエクスプロイトに対して脆弱です。これは、デフォルトでは、データベースとの対話が許可された認証がなく、すべてのユーザーがデータベースとコンテンツを作成、読み取り、変更、および破棄できるためです。これは、デフォルト設定としてすべてのインターフェースをリッスンできるMongoDBデーモン。
認証の有効化と管理者ユーザーの追加
この問題は、バージョン3.xリリース以降の最新バージョンのMongo DBで軽減されていますが、認証はデフォルト設定として引き続き無効になっているため、すべてのユーザーがデータベースに完全にアクセスできます。これを保護するために、管理ユーザーを作成して認証を有効にし、管理ユーザーで認証をテストします。
管理者ユーザーの追加
管理者ユーザーを追加するには、最初にMongoシェルに接続します。
$ mongo
Mongo DBシェルを開くと、データベースのアクセス制御が有効になっておらず、データベースへの読み取りまたは書き込みアクセスが許可されておらず、構成に制限がないという多くの警告が表示されます。
Output: MongoDB shell version v3.4.4 connecting to: MongoDB://127.0.0.1:27017 MongoDB server version: 3.4.4 Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see https://docs.mongodb.org/ Questions? Try the support group https://groups.google.com/group/mongodb-user Server has startup warnings: 2017-05-16T12:33:46.819+0530 I STORAGE [initandlisten] 2017-05-16T12:33:46.819+0530 I STORAGE [initandlisten] ** WARNING: Using the XF S filesystem is strongly recommended with the WiredTiger storage engine2017-05-16T12:33:46.819+0530 I STORAGE [initandlisten] ** See https://d ochub.mongodb.org/core/prodnotes-filesystem 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** WARNING: Access contr ol is not enabled for the database. 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** Read and wri te access to data and configuration is unrestricted. 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** WARNING: /sys/kernel/ mm/transparent_hugepage/enabled is 'always'. 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** We suggest set ting it to 'never' 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** WARNING: /sys/kernel/ mm/transparent_hugepage/defrag is 'always'. 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** We suggest set ting it to 'never' 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] >
特権レベルは変数userAdminAnyDatabaseから取得されるため、管理者アカウントのユーザー名を選択する制限はありません。データベース管理者は資格情報を保存します。
選択したユーザー名を選択し、以下のコマンドを使用して安全なパスワードを選択してください。
> use admin. switched to db admin
データベースが切り替えられたら、管理者ユーザーを作成します。
> db.createUser( ... { ... user: "DBAdmin", ... pwd: "DBAdmin'sSecurePassword", ... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] ... } ... ) Output: Successfully added user: { "user" : "DBAdmin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } >
安全なパスワードでDBAdminという管理者ユーザーを作成したので。
管理者ユーザーを作成しましたが、MongoDB構成で認証を有効にするまでは必要ありません。
MongoDBの認証を有効にする
/ etcにある構成ファイルmongod.confで認証を有効にして、MongoDBデーモンを再起動する必要があります。
次に、mongod.confファイルを編集し、$securityセクションで変更を加えます。
$ sudo vi /etc/mongod.conf
構成ファイルは次のようになります
# mongod.conf # for documentation of all options, see: # https://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: /var/lib/mongodb journal: enabled: true # engine: # mmapv1: # wiredTiger: # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # network interfaces net: port: 27017 bindIp: 127.0.0.1 #processManagement: #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options:
セクションを有効にするには、セキュリティ(#)の前にコメントを削除する必要があり、以下の認証設定を追加する必要がありました。
#processManagement-セキュリティ-承認-「有効」#operationProfiling-#replication-#sharding-
セキュリティラインにはスペースと認証ラインがなく、2つのスペースで開始する必要があることに注意してください。構成ファイルに行を追加したら、mongodデーモンを再起動する必要がありました。
以下は、MongoDBサービスを再起動するコマンドです–
$ sudo systemctl restart mongod
一度サービスを再起動すると、以下のコマンドでMongoDBサービスのステータスを確認できます–
$ sudo systemctl status mongod Output: mongod.service - High-performance, schema-free document-oriented database Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2017-05-16 12:52:09 IST; 48s ago Docs: https://docs.mongodb.org/manual Main PID: 3281 (mongod) Tasks: 20 Memory: 33.3MCPU: 734ms CGroup: /system.slice/mongod.service └─3281 /usr/bin/mongod --quiet --config /etc/mongod.conf May 16 12:52:09 ubuntu-16 systemd[1]: Started High-performance, schema-free document-oriented database.
MongoDBでの認証の確認
まず、資格情報なしでMongoDBに接続しましょう。
$ mongo Output: MongoDB shell version v3.4.4 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.4 >
これで、過去に表示されたすべての警告メッセージが解決されたことがわかります。次に、テストデータベースに接続して認証をテストします。
> show dbs 2017-05-16T12:56:17.306+0530 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", "code" : 13, "codeName" : "Unauthorized" } : _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:769:19 shellHelper@src/mongo/shell/utils.js:659:15 @(shellhelp2):1:1
認証なしではデータベースを作成または使用できないことがわかります。ここで、認証を使用してシェルを終了します。
管理者ユーザーアクセスの確認
次に、管理者ユーザー認証を使用して管理者データベースに接続してみます。以下は、ユーザー認証を使用してデータベースに接続するためのコマンドです–
$ mongo -u DBAdmin -p --authenticationDatabase admin MongoDB shell version v3.4.4 Enter password: connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.4 >show dbs admin 0.000GB local 0.000GB >
この記事では、管理者ユーザーを追加し、デフォルト設定として認証を有効にすることでMongo DBを保護する方法を学びました。MongoDBは、ユーザーがデータベースを作成、削除、変更できるユーザー認証を有効にしませんでした。
-
MongoDBにコレクションをドロップする方法は?
MongoDBにコレクションをドロップするには、drop()コマンドを使用する必要があります。構文は次のとおりです。 db.yourCollectionName.drop(); 上記の構文はtrueまたはfalseを返します。コレクションが正常に削除された場合はtrueを返し、それ以外の場合はfalseを返します。 まず、MongoDBのすべてのコレクション名を表示しましょう。ここに、いくつかのコレクションを含むデータベース「サンプル」があります。まず、「サンプル」データベースに切り替える必要があります。クエリは次のとおりです。 > use sample; switched to d
-
MongoDBでコンソールをクリアする方法は?
MongoDBでコンソールをクリアするには、次の2つの構文のいずれかを使用できます。 最初の構文は次のとおりです。これは、キーボードショートカットの使用法です- Ctrl + L 上記のキーを押すと、MongoDBでコンソールをクリアできます。 2番目の構文は次のとおりです- cls 上記の構文を理解するために、それらを1つずつ実装してみましょう。これが私のコンソールのスナップショットです。 最初のクエリは、MongoDBのコンソールをクリアするために次のとおりです- Ctrl+L; 以下は出力です- 上記のサンプル出力を見てください。コンソールはクリアされています。