【初心者】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 })