进阶 docs.memcached.org 2026-10-13 18:51:48 · 19 阅读

第29章 Binary SASL 认证

协议 | 二进制 SASL 认证 | 概述 目前,绝大多数 memcached 部署都运行在受信任的网络环境中,客户端可以随意连接任何服务器,且服务器不会对其加以限制。但有些场景下,memcached 被部署在不受信任的网络中,或者管理员希望更严格地控制接入的客户端。请注意,该机制不提供加密功能,但能提供身份认证。不要通过 Internet 使用它,而应主要用于保护大型(主要受信任的)网络内部免受邻居或误操作的影响。本页主要描述相关协议。 认证概念 认证功能从服务端抽象出来,使用简单认证与安全层(Simple Authentication and Security Layer,SASL)。此外,这使管理员能够进行与客户端认证服务基本独立的、统一的凭据管理。 协议定义 错误代码与状态码 SASL 协议提供两种状态码以支持认证:未授权(Unauthorized) 如果消息返回的状态码为 0x20,则视为认证或授权失败。这可能是对显式认证命令的响应,表明凭据未被接受,或者服务器未授予访问权限。 继续认证(Continue Authentication) 某些 SASL 机制要求客户端与服务器之间交换多条消息。如果服务器针对认证消息返回状态码 0x21,则表明客户端还需执行更多操作以完成认证协商。 不支持认证(Authentication Not Supported) 如果服务器对认证请求返回未知命令状态码(0x81),通常意味着该服务器不支持认证。对于不支持认证的服务器,客户端将其视为认证成功是可以接受的。 认证请求 列举机制 为了协商认证,客户端可能需要询问服务器支持哪些认证机制。发送一条不带额外字段、键或值的 0x20 命令,即可向服务器请求机制列表。返回的机制以空格分隔的值形式呈现。 发起认证 要发起认证请求,请发送一条命令,其操作码为 0x21,键为所需的认证机制,值则为所选机制所需的初始认证数据(如有)。 认证后续步骤 如果认证请求的响应是继续认证(状态码 0x21),其报文中将包含计算下一个认证协商值所需的数据。后续步骤的数据传输方式与初始步骤类似,但使用命令 0x22。注意,这与初始请求一样,键中也需要包含机制名称。 错误参考
状态码含义
0x20需要认证 / 认证失败
0x21需要更多认证步骤
命令参考
命令操作码键值
列举机制0x20无无
开始认证0x21机制认证数据
认证步骤0x22机制认证数据
延伸阅读 memcached SASL 使用指南 HOWTO 介绍 如果在主要为受信任的网络中运行 memcached(例如云环境或企业内部云),您可能希望限制对该服务的访问。SASL 并非作为端到端加密实现。虽然它能方便地限制守护进程访问,但不会隐藏通信内容,因此不适合在 Internet 上使用。SASL(如 RFC2222 所述)是一种标准,用于以协议无关的方式为协议添加认证机制。 入门 要部署支持 SASL 的 memcached,你需要两个条件: * 支持 SASL 的 memcached 服务器(1.4.3 及以上版本,且编译时使用 --enable-sasl 参数) * 支持 SASL 的客户端 服务端必须支持客户端所使用的认证机制。有些客户端仅支持 plain 机制,而操作系统可能默认没有提供支持 plain 机制的库或包。 配置 SASL 大部分情况下,只需执行常规的 SASL 管理操作即可。 # 为 memcached 创建用户 saslpasswd2 -a memcached -c cacheuser 运行 memcached 要在服务端启用 SASL 支持,必须使用 -S 标志。-S 标志执行以下功能: * 启用所有 SASL 命令。 * 仅要求使用二进制协议。 * 在连接上发出命令前,必须已成功完成认证。 SASL 常见问题解答 问:如何检查当前的 memcached 服务器是否构建了 SASL 支持? 答:您可以查看命令行帮助是否列出了该选项: -S, --enable-sasl 开启 Sasl 认证 答:您可以以详细模式运行服务器,例如: > memcached -S -vvvv 正在读取配置文件:<...memcached.conf> 已初始化 SASL。 答:在 Linux 上,您可以检查是否链接了 SASL 库,例如: > ldd `which memcached` | grep -i sasl libsasl2.so.3 => /lib64/libsasl2.so.3 问:配置选项 --enable-sasl-pwdb 不起作用 答:参见 问:Plain 认证不起作用,为什么? 答:运行 memcached 并加上 -vvvv 选项是否能提供有用的信息? 答:检查是否安装了实现该机制的 SASL 库,例如 /usr/lib64/sasl2/libplain.so(由 RPM 包 cyrus-sasl-plain 提供)。 答:检查密码文件的所有者是否仅为运行 memcached 的用户,且该用户具有读取权限。 答:检查客户端使用的用户名是否与密码文件中的一致。注意,有时客户端会在用户名后附加 @主机名,例如 myname@client_hostname:mypass 更多信息 阅读有关 memcached SASL 认证协议的更多资料。 二进制协议

评论 (0)