отключить анонимный доступ к MongoDB

18

Я установил MongoDB на Windows 2012 Server и запустил его на службе Windows.

Чтобы защитить его от анонимных входных данных, я выполнил следующие шаги, чтобы включить аутентификацию и отключить анонимный доступ.

Создайте учетные данные администратора, а затем Включите проверку подлинности

  1. Запустите экземпляр mongod или mongos без настроек auth или keyFile .
  2. Создайте пользователя-администратора, как описано в Create a User Administrator .
  3. Повторно запустите экземпляр mongod или mongos с параметрами auth или keyFile .

Согласно документации, запустив эту команду оболочки

  

db.auth(<username>,<password>)

он должен включить авторизацию и перезапустить экземпляр, чтобы отключить анонимный доступ.

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

Как отключить анонимный доступ к MongoDB?

Обновление

Выполнение db.serverCmdLineOpts ()

/* 0 */
{
    "argv" : [ 
        "c:\Program Files\mongodb\bin\mongod.exe", 
        "--directoryperdb", 
        "--dbpath", 
        "c:\mongodb\data", 
        "--logpath", 
        "c:\mongodb\log\mongodb_master.log", 
        "--logappend", 
        "--rest", 
        "--service"
    ],
    "parsed" : {
        "dbpath" : "c:\mongodb\data",
        "directoryperdb" : true,
        "logappend" : true,
        "logpath" : "c:\mongodb\log\mongodb_master.log",
        "rest" : true,
        "service" : true
    },
    "ok" : 1
}

Это означает, что у меня нет ключа auth. Как я могу установить там ключ авторизации?

    
задан HaBo 25.03.2014 в 23:41
источник
  • Чтобы быть понятным на вашем «анонимном входе», который все еще работает; вы можете просматривать / создавать данные? Вы должны иметь возможность подключаться анонимно для запуска команды auth, но у вас не будет никаких разрешений для запуска каких-либо других команд, если включено auth. Например, show databases возвратит ошибку, например, сбой listDatabases: {"ok": 0, "errmsg": "unauthorized"}. –  Stennie 26.03.2014 в 12:04

4 ответа

14

Чтобы полностью отключить анонимную аутентификацию, вам необходимо убедиться, что вы:

1) Добавьте административного пользователя в базу данных admin .

Пока не будет создан первый пользователь admin, по умолчанию существует localhost bypass , который позволяет вам анонимно входить в систему и настраивать этого первого пользователя.

Чтобы проверить, что у вас есть хотя бы один пользователь в вашей базе данных администратора, запустите:

db.getSiblingDB('admin').system.users.find()

2) Запустите сервер MongoDB с включенным auth (автономный сервер) или keyFile (набор реплик).

Параметр keyFile подразумевает auth и используется для внутренней проверки подлинности между узлами набора реплик.

Чтобы проверить настройки конфигурации для работающего экземпляра MongoDB, вы можете ссылаться на вывод db.serverCmdLineOpts() в оболочке mongo .

Если параметры были изменены с по умолчанию, они должны отображаться в разделе parsed вывода. То есть, один из них должен возвращать true:

db.serverCmdLineOpts().parsed.auth
db.serverCmdLineOpts().parsed.keyFile
    
ответ дан Stennie 26.03.2014 в 10:11
  • я заметил, что в анализируемом объекте нет ключа auth. Я обновил свой вопрос с результатом db.serverCmdLineOpts (). Как я могу добавить здесь ключ авторизации? –  HaBo 26.03.2014 в 14:53
  • Спасибо, я смог выполнить чистую установку и правильно настроить авторизацию. Повторите те же действия на другом сервере –  HaBo 26.03.2014 в 20:04
  • @HaBo: поскольку ваш mongod работает с параметром --service, я предполагаю, что вы выполнили шаги для запуска MongoDB в качестве службы Windows. Это включало бы настройку файла конфигурации (например, c: \ mongodb \ mongod.cfg). Вы бы добавили, нужно добавить auth = true в файл конфигурации, а затем перезапустить службу MongoDB через net stop MongoDB и net start MongoDB. –  Stennie 27.03.2014 в 01:29
  • @deadManN Пожалуйста, размещайте новый вопрос в DBA StackExchange, включая все детали, которые я предложил ранее: все, что вы пробовали, любые сообщения об ошибках и сведения о своей среде (версия O / S, версия сервера MongoDB, Тип развертывания MongoDB). Без какой-либо информации о вашей среде и том, что вы пробовали, единственное, что я хотел бы, это прочитать документацию для вашей версии MongoDB. –  Stennie 22.06.2017 в 23:30
  • @deadManN В настоящее время на StackOverflow существует более 84 000 запросов mongodb, еще 1200 на DBA StackExchange и 100 тысяч студентов, которые прошли курсы в Университете MongoDB. Есть много пользователей, желающих помочь, если вы хотите опубликовать новый вопрос о DBA с подробной информацией о вашей ситуации. Если ваши вопросы нуждаются в улучшении, сообщество предоставит обратную связь, и вы должны попытаться следовать этим предложениям, прежде чем размещать больше вопросов. Я бы сначала заподозрил ошибку использования, а не ошибку, так как auth широко используется, но вы еще не указали какие-либо реальные данные ;-) –  Stennie 29.06.2017 в 01:26
Показать остальные комментарии
2

Включение авторизации в версии 2.6+ - это в формате yml:

security:
    authorization: enabled
    
ответ дан deadManN 11.06.2017 в 16:50
  • Вы должны сделать это в файле конфигурации mongodb: sudo vi /etc/mongod.conf и не забудьте перезапустить mongodb после этого: sudo service mongod restart –  tsveti_iko 29.08.2017 в 11:09
  • @tsveti_iko Спасибо за информацию, BTW, я пользователь Windows, и я не занимался этим путем, я запускаю его, где бы я ни запускал мое монго, или это было где-то, когда у меня есть мои данные каталог на, я не помню в это время –  deadManN 02.09.2017 в 08:50
1
  

Я не уверен, что означает третий шаг

Следуя документации на Установите MongoDB в Windows ...

  

При запуске MongoDB в качестве Windows вы должны указать два параметра   Сервис: путь для выхода журнала (т. Е. Путь к журналу) и конфигурация   файл.

Это означает, что ваша команда mongod (как определено в вашей службе Windows) должна выглядеть примерно так:

c:\mongodb\bin\mongod.exe --config c:\mongodb\mongod.cfg

В вашем файле конфигурации (независимо от того, что он вызывается, mongod.cfg в моем примере выше) вам понадобится следующая строка:

auth = true

Попробуйте это и посмотрите, работает ли он. Если ваше определение услуги не содержит параметр «--config», переустановите свою службу (следуя документу, на который я ссылался), чтобы добавить его.

    
ответ дан Aaron 26.03.2014 в 02:41
  • У меня есть mongodb, который запускается как служба. Я думаю, мы можем сделать это либо из службы, либо из файла конфигурации. Теперь, если я пытаюсь запустить эту команду c: \ mongodb \ bin \ mongod.exe --config c: \ mongodb \ mongod.cfg Получаю "ERROR: не удалось прочитать из файла конфигурации" –  HaBo 26.03.2014 в 03:24
  • Из окна команды или Powershell, какой результат вы получаете, когда вы делаете тип c: \ mongodb \ mongod.cfg? Если он не найден, вам необходимо его создать. Ваш файл конфигурации не должен называться mongod.cfg. Он просто должен быть доступен для чтения в том месте, к которому имеет доступ ваш пользователь. –  Aaron 26.03.2014 в 03:39
  • используется командная строка. Поэтому я создал mongod.cfg под «C: \ Program Files \ mongodb» и выполнил эту команду на cmd .... mongod.exe --config .... mongod.cfg, и я получаю сообщение об ошибке «Не удалось прочитать из config file "и дает мне другие варианты --help --h –  HaBo 26.03.2014 в 04:08
  • Я вижу проблему, с которой у меня был Mongodb в C: \\ Program Files \ mongodb, и команда не запускала этот путь, поэтому я изменил путь к c: \\ mongodb. Но добавление конфигурационного файла с auth = true не ограничивало удаленный анонимный доступ, а я запускал MongoDB как службу. Но он проверяет учетные данные, когда я запускаю MONGODB вручную –  HaBo 26.03.2014 в 04:35
0

Вам нужно перезапустить экземпляр mongod с параметром командной строки --auth (запустите его в оболочке):

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

Имейте в виду, что путь к mongodb может быть другим, поэтому вы можете проверить значение dbPath в файле конфигурации mongodb:

sudo vi /etc/mongod.conf
    
ответ дан tsveti_iko 29.08.2017 в 11:12