如何在 Docker 中配置 CouchDB 身份验证?
How to configure CouchDB authentication in Docker?
我正在尝试在 AWS 中构建一个 Dockerized CouchDB 以 运行 来引导我的应用程序的身份验证。我有一个安装 CouchDB 1.6.1 并按照我需要的方式设置其余环境的 Dockerfile。但是,在我将它放在 AWS 上并可能将其公开之前,我想进行一些身份验证。文档显示:
http://docs.couchdb.org/en/1.6.1/api/server/authn.html
这很难正确解释配置或基本安全所需的内容。我整个下午都在阅读 SO 问题、文档和博客,所有这些都是关于如何去做的,但是没有一致的故事,我无法判断 2009 年有效的方法现在是否有效,或者哪些部分已经过时。我在当前的 ini 文件中看到了一堆可能的设置,但它们与我在网络搜索中看到的不匹配。我即将开始尝试从各种阅读材料中收集到的各种随机建议,但我想在进行试错工作之前我会先问一下。
因为我希望它在 AWS 中 运行 我需要它能够在没有手动修改的情况下启动。我需要我的 Dockerfile 来进行配置,因此使用 Futon 不会削减它。如果需要,我可以在开始时向 运行 添加一个脚本来处理那里无法完成的事情。
我认为我需要设置管理员用户,然后为用户定义角色,提供检查角色是否正确的验证功能,然后创建具有该角色的用户。然后我可以使用 cookie 身份验证(通过 SSL)来限制对我的应用程序的访问,该应用程序提供正确的登录并处理 session/cookie.
看起来其中一些可以在 Dockerfile 中完成。我是否需要在 ini 文件中配置 authentication_handlers
和管理员用户?而且我猜测修改数据库的操作将需要通过一些 运行time 脚本来完成。有没有人这样做过,或者看到过这样做的一些例子?
更新:
根据 Kxepal 的建议,我现在可以使用它了。我的 Dockerfile 源自 klaemo 的 docker-couchdb,如下所述。解决方案是强制数据库要求身份验证,但全新安装以 Admin-Party 开始。要停止这种情况,您必须创建一个管理员用户,它可以保护系统数据,但让其他数据库保持打开状态。首先,在您的 Dockerfile 中创建一个管理员用户:
RUN sed -e '/^\[admins\]$/a admin=openpassword\n' -i /usr/local/etc/couchdb/local.ini
(仅遵循 klaemo 使用 -e 的 sed 模式),当 CouchDB 运行s 时,它将对该密码进行加盐和散列处理,并将其替换到 local.ini 文件中。我提取该密码并用此替换 "openpassword" ,这样我的 Dockerfile 就没有纯文本密码了。 CouchDB 可以通过它的形式告诉它不要再次散列它。
现在保护其他数据库的正常模式是创建 users/roles 并在验证函数中使用它们来拒绝对其他数据库的访问。由于我只对获得一个用于测试的安全系统感兴趣,因此我选择推迟这一点并仅使用 local.ini 中的设置来强制每个人都进行身份验证。
Dockerfile 现在需要设置 require_valid_user 标志:
RUN sed -e '/^\[couch_httpd_auth\]$/a require_valid_user = true\n' -i /usr/local/etc/couchdb/local.ini
这需要取消对 WWW-Authenticate 设置的注释:
RUN sed -e 's/^;WWW-Authenticate/WWW-Authenticate/' -i /usr/local/etc/couchdb/local.ini
其中,由于设置显示 Basic realm="administrator"
意味着我的 iOS 应用程序中的 NSURLProtectionSpace
需要使用 @"administrator"
作为领域。
在此之后,我现在有了一个 Dockerfile,它创建了一个不允许匿名修改或读取的 CouchDB 服务器。
这并没有解决我所有的配置问题,因为我需要填充一个数据库,但是因为我使用 python 脚本来做到这一点并且因为我可以在 运行 时传递凭据那个,我已经解决了大部分问题。
要在映像构建期间设置身份验证配置,您需要检查的不是 API,而是 configuration for server admins。 TL;DR 只需将 [admin]
部分放入 local.ini 文件,并以纯文本形式包含您的用户名和密码 - 开始时,CouchDB 将用它的哈希值替换密码,并且 CouchDB 不会处于管理方状态。
P.S。您检查了 docker-couchdb 项目了吗?
我正在尝试在 AWS 中构建一个 Dockerized CouchDB 以 运行 来引导我的应用程序的身份验证。我有一个安装 CouchDB 1.6.1 并按照我需要的方式设置其余环境的 Dockerfile。但是,在我将它放在 AWS 上并可能将其公开之前,我想进行一些身份验证。文档显示:
http://docs.couchdb.org/en/1.6.1/api/server/authn.html
这很难正确解释配置或基本安全所需的内容。我整个下午都在阅读 SO 问题、文档和博客,所有这些都是关于如何去做的,但是没有一致的故事,我无法判断 2009 年有效的方法现在是否有效,或者哪些部分已经过时。我在当前的 ini 文件中看到了一堆可能的设置,但它们与我在网络搜索中看到的不匹配。我即将开始尝试从各种阅读材料中收集到的各种随机建议,但我想在进行试错工作之前我会先问一下。
因为我希望它在 AWS 中 运行 我需要它能够在没有手动修改的情况下启动。我需要我的 Dockerfile 来进行配置,因此使用 Futon 不会削减它。如果需要,我可以在开始时向 运行 添加一个脚本来处理那里无法完成的事情。
我认为我需要设置管理员用户,然后为用户定义角色,提供检查角色是否正确的验证功能,然后创建具有该角色的用户。然后我可以使用 cookie 身份验证(通过 SSL)来限制对我的应用程序的访问,该应用程序提供正确的登录并处理 session/cookie.
看起来其中一些可以在 Dockerfile 中完成。我是否需要在 ini 文件中配置 authentication_handlers
和管理员用户?而且我猜测修改数据库的操作将需要通过一些 运行time 脚本来完成。有没有人这样做过,或者看到过这样做的一些例子?
更新:
根据 Kxepal 的建议,我现在可以使用它了。我的 Dockerfile 源自 klaemo 的 docker-couchdb,如下所述。解决方案是强制数据库要求身份验证,但全新安装以 Admin-Party 开始。要停止这种情况,您必须创建一个管理员用户,它可以保护系统数据,但让其他数据库保持打开状态。首先,在您的 Dockerfile 中创建一个管理员用户:
RUN sed -e '/^\[admins\]$/a admin=openpassword\n' -i /usr/local/etc/couchdb/local.ini
(仅遵循 klaemo 使用 -e 的 sed 模式),当 CouchDB 运行s 时,它将对该密码进行加盐和散列处理,并将其替换到 local.ini 文件中。我提取该密码并用此替换 "openpassword" ,这样我的 Dockerfile 就没有纯文本密码了。 CouchDB 可以通过它的形式告诉它不要再次散列它。
现在保护其他数据库的正常模式是创建 users/roles 并在验证函数中使用它们来拒绝对其他数据库的访问。由于我只对获得一个用于测试的安全系统感兴趣,因此我选择推迟这一点并仅使用 local.ini 中的设置来强制每个人都进行身份验证。
Dockerfile 现在需要设置 require_valid_user 标志:
RUN sed -e '/^\[couch_httpd_auth\]$/a require_valid_user = true\n' -i /usr/local/etc/couchdb/local.ini
这需要取消对 WWW-Authenticate 设置的注释:
RUN sed -e 's/^;WWW-Authenticate/WWW-Authenticate/' -i /usr/local/etc/couchdb/local.ini
其中,由于设置显示 Basic realm="administrator"
意味着我的 iOS 应用程序中的 NSURLProtectionSpace
需要使用 @"administrator"
作为领域。
在此之后,我现在有了一个 Dockerfile,它创建了一个不允许匿名修改或读取的 CouchDB 服务器。
这并没有解决我所有的配置问题,因为我需要填充一个数据库,但是因为我使用 python 脚本来做到这一点并且因为我可以在 运行 时传递凭据那个,我已经解决了大部分问题。
要在映像构建期间设置身份验证配置,您需要检查的不是 API,而是 configuration for server admins。 TL;DR 只需将 [admin]
部分放入 local.ini 文件,并以纯文本形式包含您的用户名和密码 - 开始时,CouchDB 将用它的哈希值替换密码,并且 CouchDB 不会处于管理方状态。
P.S。您检查了 docker-couchdb 项目了吗?