ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ScyllaDB LDAP 认证配置指南:基于 SaslauthdAuthenticator 接入 LDAP 服务器

ScyllaDB LDAP 认证配置指南:基于 SaslauthdAuthenticator 接入 LDAP 服务器 ScyllaDB LDAP 认证配置指南基于 SaslauthdAuthenticator 接入 LDAP 服务器【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb本指南讲解如何在 ScyllaDB 中启用基于 LDAP 服务器的用户认证通过配置系统级saslauthd守护进程对接 LDAP并切换 ScyllaDB 的内置SaslauthdAuthenticator认证器使所有客户端登录凭据交由 LDAP 校验。读完本文你将掌握 saslauthd 的 LDAP 机制配置、mux 套接字定位、scylla.yaml 认证项调整、连通性自测与排错方法并理解该认证链路在 ScyllaDB 源码中的实现细节。一、认证架构ScyllaDB 如何把登录交给 LDAPScyllaDB 默认使用PasswordAuthenticator在数据库内部完成认证用户名与密码以角色形式保存在system_auth中详见 authentication.rst。而当企业希望复用已有的 LDAP 目录服务时ScyllaDB 提供了第二种路径认证外包给第三方工具 saslauthd再由 saslauthd 对接 LDAP。整个链路如下CQL 客户端 │ 用户名 密码 ▼ ScyllaDBSaslauthdAuthenticator │ 通过 Unix domain socketmux ▼ saslauthd认证代理守护进程 │ MECHldap ▼ LDAP 服务器校验凭据ScyllaDB 通过自定义认证器SaslauthdAuthenticator完成这件事。从源码 auth/saslauthd_authenticator.hh 可以看到它的职责描述当被要求认证时把凭据交给 saslauthd根据其响应决定允许或拒绝登录。该认证器内部只保存一个_socket_path即 saslauthd 监听的 Unix 域套接字路径。配置完成后任何对 ScyllaDB 的登录都会由SaslauthdAuthenticator处理其 Java 限定名为com.scylladb.auth.SaslauthdAuthenticator见 auth/saslauthd_authenticator.cc。二、前置准备安装并启用 saslauthd在配置 LDAP 之前必须先安装 saslauthd。完整的通用安装流程见 saslauthd.rst核心步骤如下安装 saslauthd 软件包按发行版选择rpm 系发行版使用cyrus-sasl包deb 系发行版使用sasl2-bin包启用服务systemctl enable saslauthd.service选择认证机制并设置机制相关的参数例如 LDAP 或 PAM具体可参考 saslauthd 的官方文档。每次修改配置后重启服务systemctl restart saslauthd.service三、把 LDAP 设置为 saslauthd 的认证机制saslauthd 本身支持多种认证机制为了让 ScyllaDB 的登录请求通过它流向 LDAP必须把 LDAP 列为 saslauthd 的认证机制。按发行版不同配置位置有别rpm 系发行版编辑/etc/sysconfig/saslauthd添加MECHldapdeb 系发行版编辑/etc/default/saslauthd添加MECHANISMSldap四、配置 /etc/saslauthd.conf 连接 LDAP仅声明机制还不够还需要编辑/etc/saslauthd.conf为你的 LDAP 服务器提供充分的参数值。典型的配置项包括参数作用示例值ldap_serversLDAP 服务器地址URI 格式多个用空格分隔ldap://ldap.example.com:389ldap_search_base搜索用户的基准 DNouPeople,dcexample,dccomldap_filter定位用户的 LDAP 过滤器模板%u会被替换为登录用户名(uid%u)ldap_bind_dnsaslauthd 执行 bind 操作使用的 DNcnadmin,dcexample,dccomldap_passwordbind 密码secretldap_starttls是否启用 STARTTLSyesldap_timeout操作超时秒10说明不同发行版/版本的 cyrus-sasl 包对/etc/saslauthd.conf参数名可能略有差异请以本机安装版本为准。配置完成后必须重启 saslauthd 服务使其生效。五、验证 saslauthd 到 LDAP 的连通性在把 ScyllaDB 接进来之前先用testsaslauthd命令独立验证 saslauthd 的 LDAP 认证是否工作正常testsaslauthd -u ldap用户名 -p 密码如果看到成功消息说明 saslauthd 已经能正确通过 LDAP 校验凭据如果失败请先确认用户名和密码正确然后查看 saslauthd 日志定位问题——可以执行dmesg -H查找LOG_AUTH相关的输出。六、定位 mux 套接字Unix domain socketSaslauthdAuthenticator通过 saslauthd 的 mux 文件即 saslauthd 对外提供服务的 Unix 域套接字与 saslauthd 通信因此必须找到它的完整路径rpm 系发行版通常是/run/saslauthd/muxdeb 系发行版通常是/var/run/sasl2/mux七、配置 ScyllaDB 使用 SaslauthdAuthenticator确认 saslauthd 已正确配置并运行后修改 ScyllaDB 的配置文件/etc/scylla/scylla.yaml仓库内的默认模板见 conf/scylla.yaml修改以下两个条目authenticator: com.scylladb.auth.SaslauthdAuthenticator saslauthd_socket_path: /run/saslauthd/mux其中authenticator必须设置为com.scylladb.auth.SaslauthdAuthenticator这是源码 auth/saslauthd_authenticator.cc 中qualified_java_name()返回的限定名saslauthd_socket_path填上一步定位到的 mux 文件路径它对应认证器构造时从配置读取的_socket_path见 auth/saslauthd_authenticator.cc。注意仓库模板中注释给出的示例默认值是/var/state/saslauthd/mux实际请以你发行版上 mux 的真实路径为准路径错误会导致认证全部失败。修改完成后重启 ScyllaDB 服务器。从此以后ScyllaDB 的所有登录尝试都会通过 saslauthd 进行认证。八、在 ScyllaDB 中创建与 LDAP 对应的角色认证成功后用户还需要具备可用的 ScyllaDB 角色。请创建与 LDAP 服务器中同名的 ScyllaDB 角色角色创建语法参考 CQL 参考文档中的安全部分完整的基于角色的访问控制RBAC示例见 rbac-usecase.rst。由于SaslauthdAuthenticator只负责验证凭据角色本身仍由 ScyllaDB 的 role manager 管理。值得一提的是从源码 auth/saslauthd_authenticator.cc 可以看出该认证器的create/alter操作会直接抛出Cannot create passwords with SaslauthdAuthenticator异常——密码不在 ScyllaDB 中保存而由 LDAP 全权负责。九、认证过程源码解析从实现层面看auth/saslauthd_authenticator.cc 的authenticate()方法做了以下几件事从凭据字典中强制提取USERNAME_KEY与PASSWORD_KEY缺失即抛出认证异常可选地提取SERVICE_KEY与REALM_KEY缺省为空字符串调用authenticate_with_saslauthd()将username、password、service、realm四元组即 auth/saslauthd_authenticator.hh 中的saslauthd_credentials打包后写入 Unix 域套接字读取 saslauthd 的应答若应答前两个字节为OK则认证通过否则抛出Incorrect credentials。协议细节方面每个字段前都有 2 字节的网络序长度前缀pack函数使用produce_be写入大端长度应答也采用“2 字节长度 负载”的格式源码注释引用了 cyrus-sasl 的saslauthd-main.c协议说明。另外认证器在start()时会检查套接字文件是否存在不存在则记录警告日志saslauthd socket file ... doesnt exist见 auth/saslauthd_authenticator.cc这是排查“全部登录失败”时很有用的第一个线索。十、进阶LDAP 角色管理LDAP Authorization如果不仅要认证还要让 LDAP 目录直接管理用户在 ScyllaDB 中的角色可以进一步参考 ldap-authorization.rst将role_manager设置为com.scylladb.auth.LDAPRoleManager并通过ldap_url_template、ldap_attr_role、ldap_bind_dn、ldap_bind_passwd等参数定义查询模板。这两项能力配置项同属 auth/config.hh 中的认证配置结构认证与授权可以配合使用形成“LDAP 校验身份 LDAP 下发角色”的完整方案。排错建议启用 LDAP 角色管理器的调试日志给 ScyllaDB 可执行文件传参--logger-log-level ldap_role_managerdebug可看到 ScyllaDB 收到的 LDAP 响应详情先用ldapsearch手工验证查询模板能对一个用户返回正确的角色条目再用ldapurl把参数转换成 URL 作为ldap_url_template的基线注意ldapsearch与ldapurl的-s默认值不同建议显式指定若ldapsearch正常而 ScyllaDB 查不到结果先核对 URL 模板中的主机与端口是否指向同一台 LDAP 服务器再对比两边 LDAP 日志中的查询差异。十一、总结通过 saslauthd 对接 LDAP 是 ScyllaDB 在企业目录服务场景下的标准认证方案配置链路清晰安装并启用 saslauthd → 声明MECHldap→ 编写/etc/saslauthd.conf→ 用testsaslauthd自测 → 在 scylla.yaml 中启用com.scylladb.auth.SaslauthdAuthenticator并指向 mux 套接字 → 重启 ScyllaDB → 创建同名角色。配合 LDAP 角色管理器还可以进一步把角色的授予也统一收归 LDAP 目录管理。仓库中对应的测试如 test/ldap/ldap_connection_test.cc 与 test/pylib/ldap_server.py可帮助你进一步验证该链路的正确性。【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进