我正在尝试构建一个Dockerized,以便在AWS中运行,为我的应用程序引导身份验证。我有一个Dockerfile,它安装了CouchDB 1.6.1,并以我需要的方式设置了环境的其余部分。但是,在我把它放到AWS上并可能将它暴露到野外之前,我想要设置一些身份验证。文档显示:
http://docs.couchdb.org/en/1.6.1/api/server/authn.html
这很难正确解释配置或基本安全所需的内容。我花了一个下午的时间阅读问题、文档和博客,都是关于如何做的,但是没有一致的故事,我无法判断2009年的效果如何,或者哪些部分过时了。我在当前ini文件中看到了许多可能的设置,但它们与我在网络搜索中看到的不匹配。我要开始尝试从不同的阅读资料中收集到的各种随机的建议,但我想在做尝试和错误的工作之前,我应该先问一下。
因为我希望它在AWS中运行,所以我需要它能够在没有手动修改的情况下启动。我需要我的Dockerfile来完成配置,所以使用Futon不会削减它。如果需要的话,我可以添加一个脚本来运行start来处理那些不能在那里完成的事情。
我相信我需要设置一个管理用户,然后为用户定义一个角色,提供一个验证函数来检查正确的角色,然后创建具有该角色的用户。然后,我可以使用cookie身份验证(通过SSL)来限制对我的应用程序的访问,该应用程序提供正确的登录并处理会话/cookie。
看起来其中的一些工作可以在Dockerfile中完成。我需要配置authentication_handlers
和ini文件中的管理用户吗?我猜修改数据库的操作需要一些运行时脚本来完成。有没有人这样做过,或者看到过这样做的一些例子?
更新:
根据Kxepal的建议,我现在让它起作用了。我的Dockerfile是从klaemo的docker-couchdb派生的,如下所述。解决方案是强制数据库需要身份验证,但是一个新的安装从Admin开始。要阻止这种情况,您必须创建一个管理员用户,这可以保护系统数据,但让其他数据库处于打开状态。首先,在Dockerfile中创建一个管理用户:
RUN sed -e '/^\[admins\]$/a admin=openpassword\n' -i /usr/local/etc/couchdb/local.ini
(遵循klaemo使用-e的sed模式),当CouchDB运行时,它将对该密码进行盐化和散列,并将其替换到local.ini文件中。我提取该密码,并将"openpassword“替换为”openpassword“,这样我的Dockerfile就没有纯文本密码。CouchDB可以通过它的形式来判断不要再散列它。
现在保护其他数据库的正常模式是创建用户/角色,并在验证函数中使用它们来拒绝对其他数据库的访问。由于我只对安全系统进行测试感兴趣,所以我选择推迟进行测试,只需使用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-身份验证设置的注释:
RUN sed -e 's/^;WWW-Authenticate/WWW-Authenticate/' -i /usr/local/etc/couchdb/local.ini
因为设置显示了Basic realm="administrator"
,这意味着我的iOS应用程序中的NSURLProtectionSpace
需要使用@"administrator"
作为领域。
在此之后,我现在有了一个Dockerfile,它创建了一个不允许匿名修改或读取的CouchDB服务器。
这并没有解决我所有的配置问题,因为我需要填充一个数据库,但是由于我使用python脚本来完成这个任务,而且我可以在运行时传递凭据,所以我已经解决了大多数问题。
发布于 2015-03-31 00:23:47
要在映像构建期间设置配置,您需要检查的不是API,而是服务器管理员的配置。只需将[admin]
部分以纯文本形式输入local.ini文件中,CouchDB就会用它代替密码,CouchDB将不会处于Admin状态。
你查过docker-couchdb项目了吗?
https://stackoverflow.com/questions/29360322
复制相似问题