CouchDB: создание пользователя без аутентификации. стандартное поведение?

Извините за этот вопрос скорее да / нет, но я не нашел документ, который бы разъяснял его, или я, должно быть, пропустил его здесь . Это стандартное поведение, когда вы можете просто создать новую запись пользователя в couchDB (не будучи пользователем с правами администратора) следующим образом:

curl -X PUT http://localhost:5984/_users/org.couchdb.user:jan \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d '{"name": "jan", "password": "apple", "roles": [], "type": "user"}'

Я только что попробовал. Он действительно работает и создает нового пользователя. Я не был уверен, предназначено это или нет (существует администратор сервера, так что это не администратор). Можно ли ограничить / настроить такое поведение для предотвращения нежелательных массовых подписок?

2
задан 13 December 2015 в 13:23
4 ответа

Я нашел ответ на свой вопрос здесь :

Кроме того, база данных _users теперь обрабатывается иначе, чем другие базы данных:

 Анонимный пользователь может только создать новый документ.
 

Итак, да , анонимный (не прошедший аутентификацию) пользователь может создать нового пользователя в CouchDB.

Чтобы настроить / ограничить это поведение, вы можете изменить функцию validate_doc_update внутри проектный документ _design / _auth , который уже обрабатывает определенные ограничения на создание пользователей (см. официальный пример ). Проверка ! Is_server_or_database_admin (userCtx, secObj) уже существует. Чтобы разрешить только администраторам добавлять новых пользователей, вы можете:

    throw({forbidden : 'Users can only be created by server or db admins in this specific CouchDB installation'})

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

Затем выглядит часть в validate_doc_update что-то вроде:

//[… existing code …]
if(!is_server_or_database_admin(userCtx, secObj)) {
    throw({forbidden : 'Users can only be created by server or db admins in this specific CouchDB installation'})
    //[… existing code …] 
}

Подробнее см. (прокрутите вниз) в официальной документации.

6
ответ дан 3 December 2019 в 08:42

EDIT: извините, это не отвечает на вопрос. Я прочитал его недостаточно внимательно.

Стандартным поведением является "Admin Party", что означает, что если не создан начальный админ (см. ниже), то все являются админами. Поэтому, чтобы ответить на вопрос - да.

CouchDB предлагает основные механизмы аутентификации.

Наиболее важным моментом является бит документации: http://docs.couchdb.org/en/latest/intro/security.html?highlight=security#authentication-database. Пользователи хранятся в базе данных аутентификации, а администраторы - в файле local.ini. Чтобы добавить администратора:

  • найдите файл local.ini с запущенной командой: couchdb -c
  • откройте файл local.ini
  • в разделе [администраторы], прокомментируйте строку admin и добавьте пароль открытым текстом
  • перезапустите CouchDB. Затем пароль будет зашифрован (проверьте его повторным открытием local.ini)

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

Пожалуйста, посмотрите также http://docs.couchdb.org/en/latest/api/database/security.html

1
ответ дан 3 December 2019 в 08:42

Чтобы анонимный пользователь не создавал новых пользователей в базе данных «_users» в CouchDB 2.2, откройте диспетчер БД Fauxton и щелкните базу данных «_users».

Нажмите «Разрешения» "и установите" Пользователи "на" admin "и" Роли "на" _admin ".

Также установите «Участники» на «admin» и «Роли» на «_admin».

Сохраните файл, и все готово.

(спасибо Эрику и Крису из CouchDB Users)

3
ответ дан 3 December 2019 в 08:42

Принятый ответ неверен, поскольку предполагает, что:

"вы можете изменить функцию validate_doc_update внутри _design / _auth проектный документ "

Это не совсем так. CouchDB позволит вам изменять функцию validate_doc_update внутри проектного документа _design / _auth, но содержимое документа будет возвращено в исходное состояние после перезапуска CouchDB . Это означает, что, если ваш CouchDB будет перезапущен, изменения будут потеряны.

См. документацию CouchDB - http://docs.couchdb.org/en/stable/intro/security.html#authentication-database :

Существует специальный проектный документ _auth, который нельзя изменить

Правильное решение заключается в изменении поведения из конфигурационного файла CouchDB local.ini .

См. https://docs.couchdb.org/en/latest/config/auth.html#couch_httpd_auth/require_valid_user

require_valid_user

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

[chttpd]
require_valid_user = ложь

[couch_httpd_auth]
require_valid_user = ложь
1
ответ дан 17 December 2019 в 18:36

Теги

Похожие вопросы