MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

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は、ユーザーがデータベースを作成、削除、変更できるユーザー認証を有効にしませんでした。


  1. MongoDBにコレクションをドロップする方法は?

    MongoDBにコレクションをドロップするには、drop()コマンドを使用する必要があります。構文は次のとおりです。 db.yourCollectionName.drop(); 上記の構文はtrueまたはfalseを返します。コレクションが正常に削除された場合はtrueを返し、それ以外の場合はfalseを返します。 まず、MongoDBのすべてのコレクション名を表示しましょう。ここに、いくつかのコレクションを含むデータベース「サンプル」があります。まず、「サンプル」データベースに切り替える必要があります。クエリは次のとおりです。 > use sample; switched to d

  2. MongoDBでコンソールをクリアする方法は?

    MongoDBでコンソールをクリアするには、次の2つの構文のいずれかを使用できます。 最初の構文は次のとおりです。これは、キーボードショートカットの使用法です- Ctrl + L 上記のキーを押すと、MongoDBでコンソールをクリアできます。 2番目の構文は次のとおりです- cls 上記の構文を理解するために、それらを1つずつ実装してみましょう。これが私のコンソールのスナップショットです。 最初のクエリは、MongoDBのコンソールをクリアするために次のとおりです- Ctrl+L; 以下は出力です- 上記のサンプル出力を見てください。コンソールはクリアされています。