GNU/Linux >> Linux の 問題 >  >> Linux

MongoDB のセキュリティを制御する方法

ハッカーはますます巧妙になり、脆弱性を悪用する方法を知っています。 MongoDB データベースに機密データがある場合は、セキュリティを真剣に考えることが重要です。しかし、どのように?心配しないでください!このチュートリアルでカバーできます!

このチュートリアルでは、MongoDB データベースを保護し、セキュリティ対策を設定してハッカーを撃退する方法を学びます。

読み進めて、MongoDB セキュリティの管理を始めましょう!

前提条件

  • このチュートリアルは実践的なデモンストレーションです。先に進むには、次のものがあることを確認してください:
  • Linux マシンにインストールされた MongoDB。
  • sudo を持つ root 以外のユーザー 特権。

専用管理ユーザーの作成

MongoDB には組み込みの認証システムがありません。デフォルトでは、データベースにアクセスできる人は誰でも完全な管理者権限を持っています — あまりにも危険です!データベースを保護する方法は?管理者権限を持つユーザーを作成し、データベースをその管理者ユーザーにロックダウンします。

この設定により、各ユーザーがデータベース内で実行できる操作を制限しながら、管理者権限を持つ単一のユーザー アクセス ポイントを提供できます。たとえば、開発者はデータベースへの読み取り専用アクセス権を持つ必要がありますが、管理者はデータを作成および編集できます。

1. 端末を開いて mongo を実行します 以下のコマンドを引数なしで実行します。このコマンドを使用すると、デフォルトの管理者ユーザーとして MongoDB シェルに接続できます。

この管理者ユーザーは、サーバー上のすべてのデータベースへの完全な読み取り/書き込みアクセス権を持っているため、強力です。このユーザーを日常業務に使用することは避けてください。

mongo

アクセス制御が有効になっていませんという警告が表示されます …., 以下に示すように.

この警告は、MongoDB サーバーにアクセスできるすべてのユーザーが、データベースに対して必要なアクションを実行できることを示しています。これらのアクションには、データベースの削除、削除、更新が含まれますが、これらに限定されません。

この警告が表示されるのは、アクセス制御をまだ有効にしていないためです。今のところ、気にしないでください。次のセクションで、アクセス制御を有効にする方法を学びます。

2. 次に、show dbs を実行します admin を含む、サーバー上のすべてのデータベースを表示するコマンド 通常のユーザーが見ることになっていないデータベース。

show dbs

3. use admin を実行します 専用の管理ユーザーの作成に重点が置かれているため、以下のコマンドを使用して管理データベースに切り替えます。このコマンドは、以下に示すように、現在のデータベース コンテキストを変更して管理データベースを使用します。

MongoDB は管理データベースを使用してアクセス制御ルールを保存し、組み込みの認証、ユーザー名、およびパスワードをユーザーとその役割に提供します。管理データベースはデータベースの機能に不可欠であるため、削除したり名前を変更したりすることはできません。

use admin

4. 次に、以下のコードをコピーして mongo シェルに貼り付け、Enter キーを押します。このコードは AdminATA というユーザーを作成します 、パスワードは LDWbPf6Fy9Ezs3Mv 、ただし、必要に応じて別の資格情報を使用できます。

この新しいユーザーには読み取り/書き込み権限があります (readWriteAnyDatabase ) すべてのデータベースへのアクセス権と、すべてのコレクションへの管理者アクセス権。ただし、このユーザーにはデータベースの削除/削除権限がなく、他のユーザーの権限を削除または変更することはできません。

コマンドを実行してエラーが発生した後、コードを再確認して再試行してください。

# The db.createUser() method creates a new user on the current database, with the privileges specified by roles.
db.createUser(
{
# Specifying the username AdminATA, but you can enter whatever username you like
user: "AdminATA",
# The passwordPrompt() method is a universal helper function 
# that tells the MongoDB shell to prompt you for a password for the AdminATA user.
pwd: passwordPrompt(),
# Specifying  the roles you want your AdminATA user to have.
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

5. 以下に示すように、プロンプトが表示されたら安全なパスワードを入力し、Enter キーを押します。

以下に、正常に追加されたユーザーが表示されます メッセージ。この出力は、管理者権限を持つユーザーを正常に作成し、それらを必要最小限の権限に制限したことを確認します。

この時点で、AdminATA という名前の管理ユーザーが既に存在します。このユーザーは、すべてのユーザーにアクセス権を付与することなく、データベースで必要なすべての操作を実行できます。

6. 最後に、exit コマンドを実行して mongo シェルを終了します。

exit

認証を有効にしてセキュリティを追加する

管理ユーザーが作成されたので、認証を有効にして、別のセキュリティ レイヤーを追加します。そうすることで、正しい認証情報を持つユーザーのみがデータベースにアクセスできるようになります。

認証とは、通常、ユーザー名とパスワードを提供するか、認証トークンを使用して、接続を検証するプロセスを指します。認証により、リソースにアクセスしようとするなりすましではなく、本人であることを確認できます。

1. MongoDB 構成ファイルを次のように編集して認証を有効にし、変更を保存します。

  • /etc/mongod.conf を開く お気に入りのテキスト エディターでファイルします。 /etc/mongod.conf ファイルには、MongoDB クラスターの構成が含まれています。
  • #security を探してコメントを外します # を削除するディレクティブ 以下に示すように、シンボルをディレクティブの前に置きます。このディレクティブは、構成ファイルでセキュリティ設定を探すように MongoDB に指示します。
  • セキュリティの下に新しい行を追加します authorization:enabled というディレクティブ . authorization:enabled に注意してください 以下に示すように、行はインデントされます (先頭に 2 つのスペースがあります)。

2. 次に、次の systemctl を実行します コマンドを実行して MongoDB サーバーを再起動し、変更を有効にします。

sudo systemctl restart mongod

3. 最後に、以下のコマンドを実行して、MongoDB サービスのステータスを表示します。

sudo systemctl status mongod

以下に、アクティブ:アクティブ (実行中) という行があります。 これは、MongoDB サーバーが実行中であり、接続を受け入れる準備ができていることを示します。

認証が機能するかどうかのテスト

認証を有効にしましたが、それが機能することをどのように確認しますか?管理ユーザーにログインして、データベースを表示して認証が機能することをテストおよび確認します。

1. 次のコマンドを実行して、mongo にアクセスします。 「専用管理ユーザーの作成」セクション (ステップ 1) で行ったようにシェルを作成します。

mongo

以下に示すように、アクセス制御が有効になっていません... というメッセージが表示されなくなりました。 認証の有効化に関する警告。代わりに、MongoDB サーバーと MongoDB シェルのバージョンを示すメッセージが表示されます。

2. 次に、show dbs を再実行します。 コマンドを実行して、データベースにアクセスできるかどうかを確認します。

show dbs

コマンドは、管理データベースを含むすべてのデータベースを表示する必要があります。しかし、以下に示すように、何も表示されません。なんで?データベースのリストを表示する権限は、管理ユーザーのみに予約されています。

Admin ロールを使用するために mongo シェルを認証していないため、データベースのリストを表示する権限がありません。

認証が有効になっていると、誰かが正しい資格情報を含まない接続文字列を使用してデータベースにアクセスしようとすると、接続は失敗します。

接続文字列の認証は MongoDB セキュリティの中核部分であり、アプリケーションのすべてのレイヤーで認証を実装する必要があります。 MongoDB へのすべての接続では、資格情報で構成される認証文字列を使用する必要があります。これらの認証情報には、正しいユーザー名とパスワードが含まれています。

3. exit を実行します コマンドで MongoDB シェルを終了します。

exit

4. 次に、以下のコマンドを実行して、新しく作成した管理ユーザーのユーザー名 (-u) で MongoDB シェルにログインします。 ) とパスワード (-p )。 AdminATA を置き換えます 「専用管理ユーザーの作成」セクション (ステップ 4) で作成したユーザー名に置き換えます。

--authenticationDatabase パラメータは、MongoDB シェルに admin に対して認証するように指示します データベース。

mongo -u AdminATA -p --authenticationDatabase admin

5. プロンプトが表示されたら、管理ユーザーのパスワードを入力します。

6. 最後に、show dbs を再実行します。 コマンドを実行して、すべてのデータベースを表示できるかどうかを確認してください。

show dbs

今回は、以下に示すように、管理者ユーザーであるため、データベースのリストが表示されます。

結論

このチュートリアルでは、接続して管理ユーザーを作成し、認証を有効にする方法を学習しました。 MongoDB のセキュリティを制御し、サーバー上のデータベースにアクセスできるユーザーを制限する方法を学びました。

この時点で、誰が何にアクセスできるかを決定できます。では、あなたにとって次は何ですか? MongoDB コンテナを安全に使用する方法を学んでみませんか?


Linux
  1. Pleskコントロールパネルからデータベースのバックアップを作成する方法

  2. Pleskコントロールパネルで新しいデータベースまたはデータベースユーザーを作成する方法

  3. 明るさコントローラー–モニターの明るさを完全に制御します

  1. Linuxデスクトップにユーザーを追加する方法

  2. MongoDBでデータベースとコレクションを作成する方法

  3. コンピュータをどのように保護できますか?

  1. CI/CDセキュリティ-CI/CDパイプラインを保護する方法

  2. cPanelでMySQLデータベースにユーザーを割り当てる方法

  3. cPanelでMySQLデータベースユーザーを作成する方法