ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

フリーのwikiサーバGROWIでMongoDBにユーザー認証を後から設定変更する手順

フリーのwikiサーバGROWIでユーザー認証を後から設定変更する手順について紹介します。今、ネットで検索するとヒットする手順は、DBにユーザーを設定していないので、セキュリティ的に問題になることがあります。ある記事では、ウイルスに感染してデータが飛んだという内容が書かれていました。


Linuxもセキュリティ対策が必要な時代なので、トレンドマイクロの製品でも入れて置きましょう。パフォーマンスを要求される場合は、DBを分けるとか、セキュリティを考えて置いたほうがいいですね。


そして、話を元に戻して、後からMongoのユーザー追加する手順からです。

MongoDB3系でユーザーを作成し、認証を有効にする設設定

MongoDB3のデータベースに接続すると「WARNING: Access control is not enabled for the database」というエラーが出力されますが、これを消す方法イコール、ユーザーを定義することになります。


以下は手順です。

keyfileの作成
mkdir -p /usr/local/mongodb/conf
openssl rand -base64 741 > /usr/local/mongodb/conf/mongodb-keyfile

権限の設定
chmod 600 /usr/local/mongodb/conf/mongodb-keyfile
chown -R mongod.mongod /usr/local/mongodb/conf/mongodb-keyfile

vi /etc/mongod.conf
----
security:
  keyFile: /usr/local/mongodb/conf/mongodb-keyfile
-----

サービス再起動
systemctl restart mongod


接続してみて、エラーが表示されないことを確認します。
[root@localhost ~]# mongo --host 127.0.0.1:27017
MongoDB shell version v3.6.4
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.6.4
>

管理ユーザを作成します。

mongo

------
use admin
switched to db admin

db.createUser({user:"ユーザー名",pwd:"パスワード",roles:[{role:"userAdminAnyDatabase",db:"DB名"}]})
Successfully added user: {
    "user" : "myUserAdmin",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}
------
ユーザー名、パスワードは環境に応じて変更してください。

vi /etc/mongod.conf
------
security:
  keyFile: /usr/local/mongodb/conf/mongodb-keyfile
  authorization: enabled
------

systemctl restart mongod

mongo
use admin
switched to db admin

> db.auth("ユーザー名","パスワード")
1

※「1」で成功。

とりあえず管理者ユーザーまでの作成が完了しました。


ちなみに、DBに対して権限を与えるだけで使えるようになりますので、例えば、すでに「TestDB」というデータベースがある場合は、以下の手順でユーザー作成、権限を付与します。権限は「readWrite」を与えています。

use TestDB

db.createUser({user:"test",pwd:"test",roles:[{role:"readWrite",db:"TestDB"}]})

Ctrl+Cで抜けて、testユーザで接続

mongo -u "test" -p "test" --authenticationDatabase "TestDB"

use TestDB

以下のコマンドでエラーが出なければ問題ないはずです。

show collections

GROWIからMongoDBへ接続


一旦、上にならいDB名は「TestDB」にしていますが、環境に合わせてください。

# MONGO_URI=mongodb://test:test@MONGO_HOST:MONGO_PORT/TestDB npm start


続いて、環境変数の定義です。

-------------
vi /etc/sysconfig/growi

以下の黄色い部分を修正。
PORT=3000
NODE_ENV=production
MONGO_URI="mongodb://test:test@localhost:27017/TestDB"
REDIS_URL="redis://localhost:6379"
ELASTICSEARCH_URI="http://localhost:9200"
#SECRET_TOKEN=
PASSWORD_SEED="`openssl rand -base64 128 | head -1`"
FILE_UPLOAD=local
[wq!]で保存。

-------------


念の為、サーバー再起動して、以下のURLで接続できればOKです。「/var/log/messages」でエラーがでていないこともチェックしておきます。

http://IPアドレス:3000