【初心者】MongoDB セキュリティ ユーザー設定

MongoDBは初期設定のままですと、簡単にアクセスされてしまいすぐに乗っ取られてしまいます。 実際に自分も乗っ取られましたww

データはバックアップしてあるので、返して欲しければ、お金を払いなさい的な内容をDBに書き込みされていました。 テストデータしかなかったので、削除して再作成しました。

 

ユーザー作成

まず設定変更が必要で変更前に実施するとauthenticationの設定が必要と記載され エラーになります。

> use admin
switched to db admin
> db.createUser({user:"mongo", pwd:"********", roles:["root"]})
2020-05-08T06:47:08.485+0900 E QUERY [js] uncaught exception: Error: couldn't add user: command createUser requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1370:11
@(shell):1:1
>

 設定ファイルの編集

securityの項目がコメントになっているので#を外して設定を追加します。

その後設定を有効にするために、mongodを再起動します。

sudo vi /etc/mongod.conf

security:
authorization: enabled

 sudo service mongod restart

db.createUser({user:"admin", pwd:"******", roles:["root"]})

2020-05-08T06:47:08.485+0900 E QUERY [js] uncaught exception: Error: couldn' t add user: command createUser requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1370:11
@(shell):1:1

これで完璧と思っていたのですが、うまくユーザー作成ができませんでした。

--authをつけた状態でmongodbを起動するとダメのようで、serviceから起動するとシェルの中で--authが入っていました。そこでコマンドレベルでmongodbを起動します。

sudo mongod

DBファイルがないと怒られます。気を取り直して

sudo mongod --dbpath "/var/lib/mongo/"

無事に起動できたが、プロンプトが戻ってこない汗

この状態でもう一つセッションを別ウインドウで開いて、そこから起動

mongo

use admin

db.createUser({user:"admin", pwd:"******", roles:["root"]})

Successfully added user: { "user" : "admin", "roles" : [ "root" ] }

ついにパスワード設定を入れることが出来ました。

あとは起動させたウインドウの方をCtrl+Dで強制終了させて、通常通りserviceよりmongodbを起動させれば完了!!

と思ったのですが、強制終了させたせいで起動がうまくできなくなってしまいました。sudoコマンドでmongodbを起動したせいで、更新されたファイルの権限がrootに代わってしまったのが原因です。そこで魔法のおまじない

sudo chown -R mongod:mongod /var/lib/mongo/

これで代替回復します。詳しくは起動しなくなった場合の章を参考下さい。

 

認証

それでは早速mongodbに入りなおして認証してみましょう。1と表示されたら成功です。

db.auth("admin","****")

> db.auth("admin","****")
1
>

 

せっかくなので管理用ではなくて、通常ユーザーも作成しましょう。

ユーザー作成するときの注意として、対象のDBに移動してから作成しましょう。adminのまま作成するとadminのDBに作成されてしまいます。

db.createUser({user:"user", pwd:"*****", roles:[{role:"readWrite", db:"new-db"}]})
ユーザーの確認

出来たユーザーを確認してみましょう。

db.system.users.find()

{ "_id" : "admin.admin", "userId" : UUID("cce83463-997b-42f8-8254-695c955add82"), "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "vFE/ZT4CtjCvRrsfx07Exg==", "storedKey" : "GkRHDZThb0AafrwK/eVhODkkqXA=", "serverKey" : "dMDuAFkBx4KhqHXm9ORSQKv9ecs=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "NKnIkHUvWctFfwJvbz06TQCTyGSG4g5+l9sIng==", "storedKey" : "1TIzZqKRavlGNBCdSUVffxdy+uMu+NuJZ8SqAR6GSUo=", "serverKey" : "dso3hL8/jyoTBEtlhI9B2HI0e/guy3XsCJsDrt7o4lw=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "userdb.user", "userId" : UUID("02eed3e5-fd13-40a5-a033-587e70577fb1"), "user" : "uemori", "db" : "userdb", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "plsoGP1/e6z/p37/3L3z3Q==", "storedKey" : "PMlg5zZrQ2g+VbAHSUFX3nZ91WI=", "serverKey" : "HmKZtD79L8xnriiA9ma8Xov0zvM=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "42/7CnZM0/bboH87UkxF9D51qTGgxULzHvvm9Q==", "storedKey" : "dtvWj7lmccrsjP1eaZjvdNZTrRkgbkbJBuWxkxOU7/Q=", "serverKey" : "zHgzJyN82zjhBEhtaUjFdt5nPd3RwNmldoVgBTU4ucc=" } }, "roles" : [ { "role" : "readWrite", "db" : "userdb" } ] }

 

ユーザー削除

間違ってユーザーを作成した場合は削除しましょう。

db.system.users.remove({user:"user"})

> db.system.users.remove({user:"user"})
WriteResult({ "nRemoved" : 1 })

 

【初心者】MongoDB 起動・停止

今回は起動方法と停止方法について解説します。

 

関係ファイル

起動に必要な関係ファイルを説明します。

 

  1. /etc/mongod.conf 設定ファイル logファイルの設定など細かい設定を記述
  2. /var/log/mongodb/mongod.log logファイル

 

起動


$ sudo service mongod start

Starting mongod: [ OK ]

 

停止

$ sudo service mongod stop

Stopping mongod: [ OK ]

 

クラッシュした場合の処理

うまく停止できなかった場合、スムーズに起動できない場合があります。

また実際に発生した場合に例を載せて説明します。

 

【初心者】Mongo DB ①インストールとアンインストール linux編

Mongo DBの勉強をしようと思ったので、メモを取るつもりでブログを作成していきます。自分がやってみて難しかった点や行き詰ったところを共有して、同じ境遇の人を助けられたらと幸いです。

実際に試した方はうまくいった、いかないなど、コメントもらえるとやる気アップしますのでよろしくお願いします。

環境

OS:CentOS release 6.10
mongo db version: v4.2.6

 

インストール

2020年5月3日現在ではバージョン4.2.6が最新バージョンになります。

すぐに古くなってしまうので、できるだけ新しいのをお勧めします。ほかのソフトウェアだと安定版などあるのですが、MongoDBの場合は見当たりませんでした。

 

レポジトリ作成

通常のソフトウェアですとyumコマンドを叩くとそのままインストールできるのですがMongoDBの場合はレポジトリを事前に作成する必要があります。

 

sudo vi /etc/yum.repos.d/mongodb-org-4.2.repo

[mongodb]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

 

こんな感じで記載してあればOKです。

 

Yumコマンドでインストール

コマンド結果も一応載せておくので少し長いですが、こんな感じでインストール完了です。

yum install -y mongodb-org

読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
* base: ty1.mirror.newmediaexpress.com
* extras: ty1.mirror.newmediaexpress.com
* remi-php71: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ty1.mirror.newmediaexpress.com
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package mongodb-org.x86_64 0:4.2.6-1.el6 will be インストール
--> 依存性の処理をしています: mongodb-org-mongos = 4.2.6 のパッケージ: mongodb-org-4.2.6-1.el6.x86_64
--> 依存性の処理をしています: mongodb-org-tools = 4.2.6 のパッケージ: mongodb-org-4.2.6-1.el6.x86_64
--> 依存性の処理をしています: mongodb-org-server = 4.2.6 のパッケージ: mongodb-org-4.2.6-1.el6.x86_64
--> 依存性の処理をしています: mongodb-org-shell = 4.2.6 のパッケージ: mongodb-org-4.2.6-1.el6.x86_64
--> トランザクションの確認を実行しています。
---> Package mongodb-org-mongos.x86_64 0:4.2.6-1.el6 will be インストール
---> Package mongodb-org-server.x86_64 0:4.2.6-1.el6 will be インストール
---> Package mongodb-org-shell.x86_64 0:4.2.6-1.el6 will be インストール
---> Package mongodb-org-tools.x86_64 0:4.2.6-1.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
================================================
インストールしています:
mongodb-org x86_64 4.2.6-1.el6 mongodb 5.8 k
依存性関連でのインストールをします。:
mongodb-org-mongos x86_64 4.2.6-1.el6 mongodb 15 M
mongodb-org-server x86_64 4.2.6-1.el6 mongodb 25 M
mongodb-org-shell x86_64 4.2.6-1.el6 mongodb 17 M
mongodb-org-tools x86_64 4.2.6-1.el6 mongodb 62 M

トランザクションの要約
================================================
インストール 5 パッケージ

総ダウンロード容量: 119 M
インストール済み容量: 283 M
パッケージをダウンロードしています:
(1/5): mongodb-org-4.2.6-1.el6.x86_64.rpm | 5.8 kB 00:00
(2/5): mongodb-org-mongos-4.2.6-1.el6.x86_64.rpm | 15 MB 00:00
(3/5): mongodb-org-server-4.2.6-1.el6.x86_64.rpm | 25 MB 00:01
(4/5): mongodb-org-shell-4.2.6-1.el6.x86_64.rpm | 17 MB 00:00
(5/5): mongodb-org-tools-4.2.6-1.el6.x86_64.rpm | 62 MB 00:03
------------------------------------------------------------------------------------------------------------------------------
合計 15 MB/s | 119 MB 00:07
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
インストールしています : mongodb-org-server-4.2.6-1.el6.x86_64 1/5
インストールしています : mongodb-org-shell-4.2.6-1.el6.x86_64 2/5
インストールしています : mongodb-org-tools-4.2.6-1.el6.x86_64 3/5
インストールしています : mongodb-org-mongos-4.2.6-1.el6.x86_64 4/5
インストールしています : mongodb-org-4.2.6-1.el6.x86_64 5/5
Verifying : mongodb-org-mongos-4.2.6-1.el6.x86_64 1/5
Verifying : mongodb-org-tools-4.2.6-1.el6.x86_64 2/5
Verifying : mongodb-org-shell-4.2.6-1.el6.x86_64 3/5
Verifying : mongodb-org-4.2.6-1.el6.x86_64 4/5
Verifying : mongodb-org-server-4.2.6-1.el6.x86_64 5/5

インストール:
mongodb-org.x86_64 0:4.2.6-1.el6

依存性関連をインストールしました:
mongodb-org-mongos.x86_64 0:4.2.6-1.el6 mongodb-org-server.x86_64 0:4.2.6-1.el6 mongodb-org-shell.x86_64 0:4.2.6-1.el6
mongodb-org-tools.x86_64 0:4.2.6-1.el6

完了しました!

 

バージョン確認

ここで問題なくインストールできたか確認のためにバージョンを参照してみましょう。

mongod --version

db version v4.2.6
git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
distmod: rhel62
distarch: x86_64
target_arch: x86_64

 

アンインストール

削除についてはyumコマンドから実施します。

 

yum remove $(rpm -qa | grep mongodb-org)

 

合わせて関連ディレクトリも削除しましょう。データは残しておきたい場合は

残しておくとそのまま使用可能です。DBのバージョンアップとかする場合はDBのみ削除して新しいものをインストールしたらデータは残っていました。

rm -r /var/log/mongodb/

rm -r /var/lib/mongo/

*1つ1つファイル削除を聞かれるので、全部消してOKという方はオプションfもつけましょう

rm -rf

 

読み込んだプラグイン:fastestmirror, refresh-packagekit, security
削除処理の設定をしています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package mongodb-org.x86_64 0:4.2.6-1.el6 will be 削除
---> Package mongodb-org-mongos.x86_64 0:4.2.6-1.el6 will be 削除
---> Package mongodb-org-server.x86_64 0:4.2.6-1.el6 will be 削除
---> Package mongodb-org-shell.x86_64 0:4.2.6-1.el6 will be 削除
---> Package mongodb-org-tools.x86_64 0:4.2.6-1.el6 will be 削除
--> 依存性解決を終了しました。

依存性を解決しました

================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
================================================
削除:
mongodb-org x86_64 4.2.6-1.el6 @mongodb 0.0
mongodb-org-mongos x86_64 4.2.6-1.el6 @mongodb 39 M
mongodb-org-server x86_64 4.2.6-1.el6 @mongodb 70 M
mongodb-org-shell x86_64 4.2.6-1.el6 @mongodb 46 M
mongodb-org-tools x86_64 4.2.6-1.el6 @mongodb 128 M

トランザクションの要約
================================================
削除 5 パッケージ

インストール済み容量: 283 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
削除中 : mongodb-org-4.2.6-1.el6.x86_64 1/5
削除中 : mongodb-org-server-4.2.6-1.el6.x86_64 2/5
警告: /var/log/mongodb/mongod.log は /var/log/mongodb/mongod.log.rpmsave として保存されました。
削除中 : mongodb-org-shell-4.2.6-1.el6.x86_64 3/5
削除中 : mongodb-org-mongos-4.2.6-1.el6.x86_64 4/5
削除中 : mongodb-org-tools-4.2.6-1.el6.x86_64 5/5
Verifying : mongodb-org-mongos-4.2.6-1.el6.x86_64 1/5
Verifying : mongodb-org-tools-4.2.6-1.el6.x86_64 2/5
Verifying : mongodb-org-shell-4.2.6-1.el6.x86_64 3/5
Verifying : mongodb-org-4.2.6-1.el6.x86_64 4/5
Verifying : mongodb-org-server-4.2.6-1.el6.x86_64 5/5

削除しました:
mongodb-org.x86_64 0:4.2.6-1.el6 mongodb-org-mongos.x86_64 0:4.2.6-1.el6 mongodb-org-server.x86_64 0:4.2.6-1.el6
mongodb-org-shell.x86_64 0:4.2.6-1.el6 mongodb-org-tools.x86_64 0:4.2.6-1.el6

完了しました!

 

本日はここまで。今後も奮闘していきますので、よろしくお願いします。