Skip to content

21.11. RADIUS 身份验证#

此身份验证方法与password的操作方式类似,但它使用 RADIUS 作为密码验证方法。RADIUS 仅用于验证用户名/密码对。因此,在 RADIUS 可用于身份验证之前,用户必须已存在于数据库中。

使用 RADIUS 身份验证时,将向配置的 RADIUS 服务器发送访问请求消息。此请求的类型为仅身份验证,并且包含用户名密码(已加密)和NAS 标识符的参数。该请求将使用与服务器共享的密钥进行加密。RADIUS 服务器将使用访问接受访问拒绝响应此请求。不支持 RADIUS 计费。

可以指定多个 RADIUS 服务器,在这种情况下,将按顺序尝试这些服务器。如果从服务器收到否定响应,则身份验证将失败。如果没有收到响应,则将尝试列表中的下一个服务器。要指定多个服务器,请用逗号分隔服务器名称,并用双引号将列表括起来。如果指定了多个服务器,则其他 RADIUS 选项也可以作为逗号分隔的列表提供,以便为每个服务器提供单独的值。它们也可以指定为单个值,在这种情况下,该值将适用于所有服务器。

RADIUS 支持以下配置选项

radiusservers

要连接到的 RADIUS 服务器的 DNS 名称或 IP 地址。此参数是必需的。

radiussecrets

与 RADIUS 服务器安全通信时使用的共享密钥。PostgreSQL 和 RADIUS 服务器上的此值必须完全相同。建议使用至少 16 个字符的字符串。此参数是必需的。

注意

如果使用支持 OpenSSLPostgreSQL 构建,则使用的加密向量才具有很强的加密性。在其他情况下,向 RADIUS 服务器传输的数据应仅被视为混淆的,而不是安全的,并且如有必要,应应用外部安全措施。

radiusports

在 RADIUS 服务器上连接的端口号。如果未指定端口,则将使用默认 RADIUS 端口(1812)。

radiusidentifiers

在 RADIUS 请求中用作 NAS 标识符 的字符串。此参数可用于(例如)识别用户尝试连接到的数据库集群,这对于在 RADIUS 服务器上进行策略匹配很有用。如果未指定标识符,则将使用默认 postgresql

如果 RADIUS 参数值中必须包含逗号或空格,可以通过将值用双引号引起来来实现,但这很繁琐,因为现在需要两层双引号。将空格放入 RADIUS 密钥字符串的示例是

host ... radius radiusservers="server1,server2" radiussecrets="""secret one"",""secret two"""