как настроить mogodb в службе выскочки с аутентификацией

Я создал суперпользователя tom в mongodb v2.6.11 с имя пользователя и пароль, и теперь я хочу добавить его в службу запуска Ubuntu.

при поиске узнал, что мне нужно отредактировать файл ниже

вот так выглядит мой /etc/init/mongod.conf

pre-start script
    mkdir -p /var/lib/mongodb/
    mkdir -p /var/log/mongodb/
end script

start on runlevel [2345]
stop on runlevel [06]

script
  ENABLE_MONGOD="yes"
  CONF=/etc/mongod.conf
  DAEMON=/usr/bin/mongod
  DAEMONUSER=${DAEMONUSER:-mongodb}

  if [ -f /etc/default/mongod ]; then . /etc/default/mongod; fi

  # Handle NUMA access to CPUs (SERVER-3574)
  # This verifies the existence of numactl as well as testing that the command works
  NUMACTL_ARGS="--interleave=all"
  if which numactl >/dev/null 2>/dev/null && numactl $NUMACTL_ARGS ls / >/dev/null 2>/dev/null
  then/etc/init/mongod.conf
    NUMACTL="$(which numactl) -- $NUMACTL_ARGS"
    DAEMON_OPTS=${DAEMON_OPTS:-"--config $CONF"}
  else
    NUMACTL=""
    DAEMON_OPTS="-- "${DAEMON_OPTS:-"--config $CONF"}
  fi

  if [ "x$ENABLE_MONGOD" = "xyes" ]
  then
    exec start-stop-daemon --start --chuid $DAEMONUSER --exec $NUMACTL $DAEMON $DAEMON_OPTS
  fi
end script

ПОПЫТКА 1: с помощью командной строки mongo

sudo mongod --auth --port 27017 --dbpath /var/lib/mongodb

но не знаете что изменить в /etc/init/mongod.conf ?


ПОПЫТКА 2: с помощью /etc/mongod.conf

  1. Сделал изменения в /etc/mongod.conf

auth = true

port = 27017

  1. $sudo mongod --config /etc/mongod.conf

  2. /var/log/mongodb/mongod.log после команды стрельбы

    2016-01-20T23:58:41.675+0530 ***** SERVER RESTARTED ***** 2016-01-20T23:58:41.677+0530 [initandlisten] MongoDB starting : pid=3168 port=27017 dbpath=/var/lib/mongodb 64-bit host=vijay 2016-01-20T23:58:41.677+0530 [initandlisten] db version v2.6.11 2016-01-20T23:58:41.677+0530 [initandlisten] git version: d00c1735675c457f75a12d530bee85421f0c5548 2016-01-20T23:58:41.677+0530 [initandlisten] build info: Linux build4.ny.cbi.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49 2016-01-20T23:58:41.677+0530 [initandlisten] allocator: tcmalloc 2016-01-20T23:58:41.677+0530 [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1", port: 27017 }, security: { authorization: "enabled" }, storage: { dbPath: "/var/lib/mongodb" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } } 2016-01-20T23:58:41.812+0530 [initandlisten] journal dir=/var/lib/mongodb/journal 2016-01-20T23:58:41.812+0530 [initandlisten] recover : no journal files present, no recovery needed 2016-01-20T23:58:41.934+0530 [initandlisten] waiting for connections on port 27017 2016-01-20T23:58:47.746+0530 [signalProcessingThread] got signal 2 (Interrupt), will terminate after current cmd ends 2016-01-20T23:58:47.746+0530 [signalProcessingThread] now exiting 2016-01-20T23:58:47.746+0530 [signalProcessingThread] dbexit: 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: going to close listening sockets... 2016-01-20T23:58:47.746+0530 [signalProcessingThread] closing listening socket: 10 2016-01-20T23:58:47.746+0530 [signalProcessingThread] closing listening socket: 13 2016-01-20T23:58:47.746+0530 [signalProcessingThread] removing socket file: /tmp/mongodb-27017.sock 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: going to flush diaglog... 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: going to close sockets... 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: waiting for fs preallocator... 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: lock for final commit... 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: final commit... 2016-01-20T23:58:47.838+0530 [signalProcessingThread] shutdown: closing all files... 2016-01-20T23:58:47.843+0530 [signalProcessingThread] closeAllFiles() finished 2016-01-20T23:58:47.843+0530 [signalProcessingThread] journalCleanup... 2016-01-20T23:58:47.843+0530 [signalProcessingThread] removeJournalFiles 2016-01-20T23:58:47.949+0530 [signalProcessingThread] shutdown: removing fs lock... 2016-01-20T23:58:47.949+0530 [signalProcessingThread] dbexit: really exiting now

  3. Но при закрытии терминала mongodb также закрывается

ПОПЫТКА 3

  1. Внесены ли изменения в /etc/mongod.conf

auth = true

port = 27017

  1. ПЕРЕЗАГРУЗИТЕ КОМПЬЮТЕР

  2. /var/log/mongodb/mongod.log после ПЕРЕЗАПУСКА КОМПЬЮТЕРА

    2016-01-21T00:40:13.011+0530 ***** SERVER RESTARTED ***** 2016-01-21T00:40:13.014+0530 [initandlisten] MongoDB starting : pid=1012 port=27017 dbpath=/var/lib/mongodb 64-bit host=vijay 2016-01-21T00:40:13.014+0530 [initandlisten] db version v2.6.11 2016-01-21T00:40:13.014+0530 [initandlisten] git version: d00c1735675c457f75a12d530bee85421f0c5548 2016-01-21T00:40:13.014+0530 [initandlisten] build info: Linux build4.ny.cbi.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49 2016-01-21T00:40:13.014+0530 [initandlisten] allocator: tcmalloc 2016-01-21T00:40:13.014+0530 [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1", port: 27017 }, security: { authorization: "enabled" }, storage: { dbPath: "/var/lib/mongodb" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } } 2016-01-21T00:40:13.439+0530 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /var/lib/mongodb/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating 2016-01-21T00:40:13.439+0530 [initandlisten] dbexit: 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: going to close listening sockets... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: going to flush diaglog... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: going to close sockets... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: waiting for fs preallocator... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: lock for final commit... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: final commit... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: closing all files... 2016-01-21T00:40:13.439+0530 [initandlisten] closeAllFiles() finished 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: removing fs lock... 2016-01-21T00:40:13.439+0530 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor 2016-01-21T00:40:13.440+0530 [initandlisten] dbexit: really exiting now

  3. Наблюдение: Unable to create/open lock file: /var/lib/mongodb/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating Я нашел эту ошибку в журнале. Не знаю, вызывает ли это прекращение работы mongodb. Если это приводит к тому, что mongo STOP при запуске компьютера, то как установить разрешение ?


person Mr punch    schedule 18.01.2016    source источник


Ответы (4)


Нет абсолютно никакой необходимости возиться с файлами запуска (чего вам действительно не следует делать, если вы точно не знаете, что делаете) или устанавливать дополнительное программное обеспечение для управления MongoDB.

Я бы предпочел прочитать обширную документацию MongoDB по параметрам файла конфигурации< /а>.

Единственное, что вам нужно сделать, это установить

auth=true

для устаревших файлов конфигурации или

security:
  authorization: enabled

для файлов конфигурации YAML в /etc/mongod.conf

person Markus W Mahlberg    schedule 18.01.2016
comment
Вместо того, чтобы запускать его вручную, просто используйте service MongoDB restart, чтобы применить изменения конфигурации. - person Markus W Mahlberg; 21.01.2016

В качестве альтернативы можно использовать supervisor:

apt install supervisor

Настройка для процесса mongodb:

создайте файл myupstartservice.conf в месте /etc/supervisor/conf.d и поместите ниже код

[program:mongo]
command=/usr/bin/mongod --auth --config /etc/mongod.conf
autostart=true
autorestart=true
user=root
priority=100

тогда чексервис

service supervisor restart

некоторые ссылки< /а>

person alex10    schedule 18.01.2016
comment
Какого черта нужно использовать супервизора поверх выскочки поверх инициализации? - person Markus W Mahlberg; 18.01.2016
comment
Его намного проще настроить, что значительно упрощает жизнь. - person alex10; 18.01.2016
comment
О, и кстати: вы никогда не должны запускать MongoDB как root. - person Markus W Mahlberg; 19.01.2016
comment
ну это просто пример ;) - person alex10; 19.01.2016
comment
Алекс, прости, но запускать как-то не лучшая идея. Пример? Каждый злоумышленник, способный получить доступ к рассматриваемому экземпляру MongoDB, может получить права root на машине, если OP использует предложенную вами конфигурацию. Не думайте, что предложения будут отражены. Достаточно часто это просто c&p. Когда mongod работает от имени пользователя root, нет 5%-го запаса безопасности на диске: ваш mongodb может заполнить файловую систему, что сделает невозможным выполнение дальнейших административных задач, заставив вас работать из работающей системы. Будет ли он работать как root через супервизора? Да. Это хорошая идея? Не так много. - person Markus W Mahlberg; 19.01.2016
comment
^ бла-бла-бла. Я скомпилировал mongo из исходников, потому что новые версии недоступны для Raspberry pi. Из-за этого мне пришлось сделать свою собственную настройку инициализации. С таким же успехом можно использовать супервизор или systemD, потому что зачем использовать выскочку? - person Felipe; 14.01.2018

Спасибо @Markus W mahalberg за подробный ответ.

Правильный способ Mongodb установить mongo при запуске с аутентификацией


Шаги :

1 : sudo apt-get install mongodb-org - в новом терминале

2 : sudo mongod --port 27017 --dbpath /var/lib/mongodb

3 : mongo --port 27017 - в новом терминале

4 : use admin

5: Давайте настроим суперпользователя

db.createUser(
{
    user: "tom",
    pwd: "jerry",
    roles: [
              { role: "userAdminAnyDatabase", db: "admin" },
              { role: "readWriteAnyDatabase", db: "admin" },
              { role: "dbAdminAnyDatabase", db: "admin" },
              { role: "clusterAdmin", db: "admin" }
           ]
})

6: давайте настроим службу запуска для этого Do Changes In /etc/mongod.conf и установим

auth = true

port = 27017

7 : sudo /etc/init.d/mongod stop ИЛИ sudo service mongod stop - в новом терминале

8 : sudo /etc/init.d/mongod start OR sudo service mongod start

9 : restart your pc и перед перезагрузкой компьютера очистите этот файл /var/log/mongodb/mongod.log и сохраните

Теперь давайте проверим ДВА пункта Аутентификация и mongodb, работающий при запуске.

1 :Проверьте настройки аутентификации

mongo --port 27017 -u "tom" -p "jerry" --authenticationDatabase "admin" - в новом терминале

Примечание: этот шаг является самым важным.

он выдаст вывод на терминал, например

MongoDB shell version: 2.6.11
connecting to: 127.0.0.1:27017/test
>

2:Проверьте, запущен ли mongodb при запуске

Запустите команду ниже, не запуская mongod, так как mongod должен был запуститься при запуске

mongo --port 27017 -u "tom" -p "jerry" --authenticationDatabase "admin" - в новом терминале

Если он не запускается, откройте этот файл '/var/log/mongodb/mongod.log'.

если он содержит журнал ошибок:

Unable to create/open lock file: /var/lib/mongodb/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating

Затем примените эти разрешения и перезапустите и снова проверьте

sudo chown -R mongodb:mongodb /var/lib/mongodb/.
sudo chown -R mongodb:mongodb /var/log/mongodb/mongod.log
sudo /etc/init.d/mongod stop` OR `sudo service mongod stop    
sudo /etc/init.d/mongod start` OR `sudo service mongod start 

Если он не содержит приведенный выше журнал ошибок, вы должны были успешно запустить mongodb при запуске

person Mr punch    schedule 27.01.2016

1 : Должен -> $cd /etc/init/

2: Через редактор vi или nano Создайте файл myservice.conf с приведенным ниже кодом.

description "service to start mongodb at startup"
author "plutopunch :)"

start on started mountall
stop on shutdown

respawn
respawn limit 99 5

script
     export HOME="/home/admin"

     exec sudo mongod --port 27017 --auth --dbpath /var/lib/mongodb
end script

post-start script
end script

3: перезагрузить компьютер

http://upstart.ubuntu.com/cookbook/

person Mr punch    schedule 18.01.2016