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