MongoDBはインストール直後はだれでもDBを操作できます。セキュリティはないに等しい状態。
インストール作業でユーザー作成・操作権限は最低限やっておきましょう。という話です。
MySQLと使うコマンドは違いますが、作業の流れは似てるので困ることはないでしょう。
インストール直後のMongoDBは、サーバーに入れてしまえば誰でもなんでもできます。
これ、一般ユーザーでも実行できます。『アカン!』ですね?
まぁ、MySQLでも同じですが。
そこで、既存のユーザーがあるのか見てみました。
うん、ないですね? これMySQLでも同じだった。(ような気がする。)
話を戻して、mongoコマンドでログインするといくつかの警告が出ています。
WARNING: Access control is not enabled for the database.
Read and write access to data and configuration is unrestricted.
警告:データベースへのアクセスコントロールが制御が有効になっていません。
データや設定への読み書きアクセスは無制限です。
今回はこれを消します。作業は
DB接続ユーザー作成
DB接続をユーザー認証に変更
これだけ。(そのほかの警告も一緒に消える。)
管理者権限のユーザー作成
管理者権限のユーザー(rootユーザーとも言う)を作成して、無名ユーザー(ユーザーなし)をはじきましょう。
内容は公式ドキュメントのまま進めます。
use adminでカレント・データベースをadminに変えます。そこでユーザ作成コマンドを実行。
ユーザー名rootは説明のために分かりやすくしていますが、実際はオリジナルで管理者だと分からないようにしてください。
(不正ログインで見当がつかないように。)
ロール(権限)の設定は、config, localデータベース以外のユーザ・ロール作成、コレクション作成・読み書き権限を与えます。
(可能なかぎり最高の権限。コレクションはMySQLのテーブルにあたる。)
4.2の新機能 - passwordPrompt()
パスワードの設定でdb.createUser()に直書きしているのを見ますが、新しいMongoDB(バージョン4.2)では、プロンプト関数を使うように勧めています。
(今までと同じように直書きでも可能。)
MongoDBマニュアル
設定ファイルの変更
ユーザーを作っただけでは何も変わりません。設定ファイル(/etc/mongod.conf)でセキュアコネクションを設定しましょう。
システムに反映させます。
(mongodではsystemctlのreloadはない。)
コネクション確認
MongoDBのセキュアコネクションは不思議で、接続拒否ではなく参照・実行拒否です。
(コネクション自体はできて操作ができない。)
ユーザーなしだとこうなります。
コネクションできてデータベースのスイッチまではできるけどその他はアウトです。
(DB一覧結果が0。コレクション一覧を表示すると警告(参照拒否)。)
今度は作成したrootユーザーでログインします。
うん、ちゃんとできてますね? ちゃっかりsystem.usersコレクションが作られてる。
警告も出なくなったし。これだけ目立つところに出てたってことは、これくらいはやっとけ!ってことですね?
これ以外にもセキュアな作業はいくつかあり、
TLS/SSL設定などはやっておいたほうがいいですが、認証局からキーを取っておかないといけないし、ローカル接続しかしないし、とりあえず今回は割愛します。
少なくともユーザー作成と権限設定は、インストールしたらそこで作業を止めずに一気にやっちゃいましょう。