20.11. RADIUS 身份验证

除了使用 RADIUS 作为密码验证方法之外,此身份验证方法的操作与password相似。 RADIUS 仅用于验证用户名/密码对。因此,用户必须已经存在于数据库中,然后才能使用 RADIUS 进行身份验证。

使用 RADIUS 身份验证时,访问请求消息将发送到配置的 RADIUS 服务器。该请求的类型将为Authenticate Only,并包含user namepassword(已加密)和NAS Identifier的参数。该请求将使用与服务器共享的机密进行加密。 RADIUS 服务器将使用Access AcceptAccess Reject响应此请求。不支持 RADIUS 记帐。

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

RADIUS 支持以下配置选项:

  • radiusservers

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

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

Note

如果 PostgreSQL 是在支持 OpenSSL 的情况下构建的,则所使用的加密矢量仅具有加密强度。在其他情况下,仅应考虑到到 RADIUS 服务器的传输是混乱的,而不是安全的,并且在必要时应采用外部安全措施。

  • radiusports

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

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

如果必须在 RADIUS 参数值中使用逗号或空格,可以通过在值周围加上双引号来完成,但这很麻烦,因为现在需要两层双引号。将空格放入 RADIUS 机密字符串的示例如下:

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