首次访问 Fauxton 时需要创建的管理员密码在本地.ini 文件中的哪一段落被加密存储?
解读
在国内 CouchDB 面试中,这道题常被用来验证候选人是否真正动手部署过集群,而非只停留在“会 curl”。
面试官想确认三点:
- 你是否知道首次向导产生的管理员属于 本地.ini 配置,而不是 _users 数据库;
- 你是否清楚 CouchDB 采用 PBKDF2 哈希而非明文;
- 你是否能准确说出段落名,避免与 [admins] 混淆成 [couch_httpd_auth] 或其他段。
知识点
- CouchDB 配置层级:
- default.ini(只读,安装自带)
- local.ini(读写,运维人员维护,重启生效)
- 首次向导在 local.ini 追加 [admins] 段,格式:
admin = -pbkdf2-…,…,…,…
字段依次为:算法、迭代次数、盐、派生密钥。 - 只有 本地节点 读取该段完成基本认证;集群模式下仍需再把同一哈希同步到各节点 local.ini,否则节点间管理员不一致。
- 修改后需 重启 或发送
POST /_node/_local/_config热加载,否则新哈希不生效。
答案
[admins] 段。首次向导写入 local.ini 的格式为 -pbkdf2-… 的加密串。
拓展思考
- 如果 local.ini 里同时存在
[admins]与[couch_httpd_auth]的require_valid_user = true,哪一个优先级更高?
答:前者负责 凭证校验,后者负责 是否强制登录,二者互补,不冲突。 - 国内等保场景要求密码定期更换,如何批量更新多节点?
答:可写 Ansible 模板,把新哈希一次性渲染到所有节点的 local.ini,再滚动重启;或调用/_node/couchdb@<name>/_config/admins/admin接口热写,然后持久化到 local.ini。 - 若误删 local.ini 中的 [admins] 段,服务重启后无法登录,如何自救?
答:停进程 → 临时在 local.ini 手动添加一行admin = 明文密码→ 启动 → CouchDB 会自动哈希化并写回;随后立即用新密码登录,再把明文改成更安全的哈希。