Подтвердить что ты не робот

Сервер MongoDB по-прежнему доступен без учетных данных

У меня есть новый сервер mongodb (2.6.0) на моей машине, и я начал экземпляр mongod со следующим конфигурационным файлом:

dbpath = c:\mongo\data\db
port = 27017
logpath = c:\mongo\data\logs\mongo.log
auth = true

Позже я подключился к этому экземпляру mongod через оболочку mongo и создал пользователя admin:

use admin
db.createUser(
  {
    user: "tugberk",
    pwd: "12345678",
    roles:
    [
      {
        role: "userAdminAnyDatabase",
        db: "admin"
      }
    ]
  }
)

Затем я вышел из оболочки и снова подключился к следующей команде:

mongo --host localhost --port 27017 -u tugberk -p 12345678 --authenticationDatabase admin

Затем я создал пользователя с правами root:

use admin
db.createUser(
    {
      user: "tugberkRoot",
      pwd: "12345678",
      roles: [ "root" ]
    }
)

Последний шаг здесь не нужен, но анонимный доступ теперь должен быть полностью отключен. Тем не менее, я все еще могу подключиться к нему анонимно через оболочку mongo (даже если у меня нет доступа к чему-либо):

enter image description here

Что делать, чтобы предотвратить анонимное соединение?

4b9b3361

Ответ 1

Аутентификация запрещает вам выполнять действия в базе данных (как показывает ваш скриншот - вы даже не можете перечислять базы данных), это не предотвращает подключения - в конце концов, вы должны иметь возможность подключиться, чтобы иметь возможность аутентифицироваться.

Существует запрос для добавления тайм-аутов, но на данный момент это, по сути, означает, что сервер должен вести себя.

Стоит отметить, что до тех пор, пока вы не попытаетесь что-то сделать, это действительно не что иное, как просто подключение к порту с telnet - текст, отображаемый в начале "подключение к:" и т.д., от клиента, а не сервер. Как только он пытается сделать что-либо, не прошедшее проверку подлинности, даже перечислит предупреждения сервера, возникает ошибка, потому что у нее недостаточно прав.

Если вы хотите заблокировать вещи с точки зрения подключения, единственной возможностью с точки зрения MongoDB является ограничение IP-адресов, которые он прослушивает (по умолчанию все), используя bindIp. Используя 127.0.0.1, можно было бы заблокировать его до локального использования (но тогда вы не сможете подключиться с удаленного хоста), что делает проблему репликации очень осторожной при выборе вашего связанного адреса.

За пределами MongoDB вы должны смотреть на блокировку вещей с точки зрения брандмауэра. В Linux это будет IPTables, ufw, hosts.allow/deny или что-то подобное. Брандмауэр Windows не является моей областью знаний, но я бы предположил, что вы тоже можете сделать подобное.

Ответ 2

Хотя вы можете защитить свои базы данных, включив аутентификацию в разделе безопасности файла mongo.conf, например так:

security:
  authorization: enabled