Skip to main content
Version: voronezh

mongodb-redos

Требования к установке mongodb

  • Каталог, указанный в параметре storage.dbPath (обычно /var/lib/mongo) должен размещаться на отдельном raid1 устройстве и доступен для записи пользователью mongod
  • Во избежание остановки службы в случае переполнения памяти памяти рекомендуется установить для него oomscore

Установка Mongodb в РЕДОС 7.3

Подготовка к установке.

  • Каталог по умолчанию mongodb /var/lib/mongo должен быть на отдельном разделе
  • Присутствует в стандартных репозиториях РЕДОС 7.3

Установка:

sudo yum install mongodb-org –y

Перед запуском предоставить права на /var/lib/mongo:

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

Служба может не запуститься, не находя файла конфигурации /etc/mongod.conf
Файл после инсталяции пакета может быть в /etc/mongo/mongod.conf

cp /etc/mongo/mongod.conf /etc/mongod.conf

Запуск службы

sudo systemctl enable --now mongod

Настройка firewalld (опционально для сетей, отличных от госпитальной). Предварительно установить firewalld!

sudo firewall-cmd --zone=public --permanent --add-port=27017/tcp
sudo firewall-cmd –reload

По умолчанию не устанавливается оболочка mongo shell, ставим отдельно.

sudo dnf install mongodb-org-shell

Настройка пользователя и БД:

mongo
## insert data
> use admin
> db.createUser( { user: "<admin>", pwd: passwordPrompt(), roles: [ { role: "userAdminAnyDatabase", db: "<databaseName>" }, "readWriteAnyDatabase" ]})
> db.createUser( { user: "<user>", pwd: "<password>", roles: [ { role: "readWrite", db: "<databaseName>" } ] } )
> db.createUser( { user: "<user-audit>", pwd: "<password>", roles: [ { role: "readWrite", db: "<databaseName-audit>" } ] } )
> exit

Включение авторизации:

vim /etc/mongod.conf
...
security:
authorization: "enabled"
...
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,<hp network ip addr>

## Restart
systemctl restart mongod

Можно указать bindIp 0.0.0.0, но необходимо убедиться, что со стороны внешней сети порт прикрыт firewall.

Проверка:

mongo --host 127.0.0.1 \
--port 27017 \
--username <user> \
--password
...
> use <databaseName>
switched to db <databaseName>
> db.getCollectionNames()
[ ]

Настройка ротации логов mongod:

  • Установить logrotate:
sudo yum install -y logrotate
  • Привести секцию systemLog в файле /etc/mongod.conf к виду:
systemLog:
destination: file
logAppend: true
logRotate: reopen
path: /var/log/mongodb/mongod.log
  • Убедиться, что в секции processManagement задан параметр pidFilePath (если параметр не задан, pid файл не создается)
processManagement:
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile

  • Рестартовать сервис
systemctl restart mongod
  • Настроить logrotate: Файл /etc/logrotate.d/mongo
/var/log/mongodb/*.log {
daily
rotate 30
size 512M
compress
dateext
missingok
create 0600 mongod mongod
notifempty
sharedscripts
postrotate
/bin/kill -SIGUSR1 $(cat /var/run/mongodb/mongod.pid)
endscript
}

Проверка:

ls -l /var/log/mongodb
...
sudo logrotate --force --debug /etc/logrotate.d/mongo
...
ls -l /var/log/mongodb

Настройка OOMScore для mongodb.service

  • Выполнить systemctl edit mongod.service, дополнить секцию Service:
[Service]
OOMScoreAdjust=-1000
  • Перезапустить службу
sudo systemctl daemon-reload
sudo systemctl restart mongod