Назад | Перейти на главную страницу

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"}'

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

Я нашел ответ на свой вопрос Вот:

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

An anonymous user can only create a new document.

Так, да, анонимный (не прошедший проверку подлинности) пользователь может создать нового пользователя в 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'})

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

Роль в 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 …] 
}

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

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

Щелкните вкладку «Разрешения» и установите «Пользователи» на «admin», а «Роли» на «_admin».

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

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

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

РЕДАКТИРОВАТЬ: извините, это не ответ на вопрос. Я недостаточно внимательно ее прочитал.

Стандартным поведением является «Администрация», что означает, что если начальный администратор не создан (см. Ниже), все являются администраторами. Итак, чтобы ответить на вопрос - да.

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

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

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

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

См. Также http://docs.couchdb.org/en/latest/api/database/security.html

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

"вы можете изменить функцию 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:

There is a special design document _auth that cannot be modified

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

Видеть https://docs.couchdb.org/en/latest/config/auth.html#couch_httpd_auth/require_valid_user

require_valid_user

When this option is set to true, no requests are allowed from anonymous users. Everyone must be authenticated.

[chttpd]
require_valid_user = false

[couch_httpd_auth]
require_valid_user = false