暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

社区博客 | PostgreSQL数据库安全性:基于外部服务器的认证

点击上方蓝字关注我们





导读

本文所述的认证方式及其配置方法对于泽拓昆仑Klustron也完全适用。


关键词:PostgreSQL、外部认证、安全


数据库安全性对于保护存储在数据库中的敏感信息至关重要。其中,认证作为核心环节,旨在验证试图访问数据库的用户身份。认证过程通常通过用户名和密码完成,同时涉及安全令牌和一次性密码等多重因素。DBA必须部署强大的认证机制,确保只有授权用户才能访问数据库及其数据。此外,定期监控和审计数据库认证日志以便发现并阻止任何未授权的访问尝试是非常必要的。

PostgreSQL服务器认证是指验证尝试连接到PostgreSQL服务器的用户的身份。这可以通过多种方法完成,包括密码认证、客户端证书、以及GSSAPI、LDAP和RADIUS等外部认证方式。pg_hba.conf文件用于配置PostgreSQL服务器采用的认证方法,并能针对不同连接类型设定不同的方法。默认情况下,PostgreSQL采用基于信任的认证机制,即认为来自本地主机的所有连接均为可信,无需密码。但值得注意的是,为了确保数据安全访问,建议在远程连接和生产环境中采用基于密码或外部认证方式。

谈到安全,认证是第一道防线。PostgreSQL提供了多种认证方法,可以归为三大类:
  • PostgreSQL内部认证
  • 基于操作系统的认证
  • 基于外部服务器的认证

在之前的博客中,我们已经讨论了PostgreSQL内部认证和基于操作系统的认证。现在,让我们来了解一下外部认证方式。


01  
PostgreSQL外部认证

PostgreSQL支持多种外部认证方法,包括GSSAPI、LDAP和RADIUS。

  • GSSAPI,即通用安全服务应用程序接口,利用Kerberos进行用户认证。

  • LDAP,即轻量级目录访问协议,通过LDAP服务器认证用户。

  • RADIUS,即远程认证拨号用户服务,通过RADIUS服务器认证用户。这些外部认证方法通过提供一种集中式的用户访问管理方式,避免了在数据库中存储密码的需求,来保护PostgreSQL数据库的安全。

但需要注意的是,GSSAPI和RADIUS仅在PostgreSQL服务器9.1或更高版本中得到支持,而LDAP是所有版本的内置特性。


02  
LDAP(轻量级目录访问协议)

LDAP是企业环境中流行的认证方法,也可用于PostgreSQL。本节将介绍如何为PostgreSQL设置LDAP认证,并提供一个配置示例。开始之前,你需要访问一个LDAP服务器,并对其工作原理有基本的了解。你还需要在服务器上安装并运行PostgreSQL。

步骤 1: 安装 OpenLDAP 服务器和客户端包
    sudo apt-get update 
    sudo apt-get install slapd ldap-utils
    复制

    步骤 2: 配置 OpenLDAP 服务器
      sudo dpkg-reconfigure slapd
      复制
      • 当被询问是否使用 dbconfig-common 配置数据库时选择“否”。
      • 为您的 LDAP 服务器设置域名,例如,“example.com”。
      • 为您的 LDAP 服务器设置组织名称,例如,“Example Inc”。
      • 设置您的 LDAP 服务器的管理员密码。

      步骤 3: 创建 LDAP 目录结构
        sudo ldapadd -x -D cn=admin,dc=example,dc=com -w <admin password> -f base.ldif
        复制

        其中“base.ldif”是一个包含您想要创建的目录结构的文件。

        步骤 4: 测试 LDAP 服务器
          ldapsearch -x -b dc=example,dc=com -D cn=admin,dc=example,dc=com -w <admin password>
          复制

          此命令应返回有关您的 LDAP 目录的信息。

          步骤 5: 向 LDAP 目录添加用户和组
            ldapadd -x -D cn=admin,dc=example,dc=com -w <admin password> -f users.ldif
            复制

            其中“users.ldif”是一个包含您想要添加到目录的用户和组的文件。

            步骤 6: 测试用户认证
              ldapwhoami -x -D cn=<user>,dc=example,dc=com -w <user password>
              复制

              此命令应返回用户的 DN(区分名),表明用户已成功认证。

              步骤 7: 配置 pg_hba.conf

              pg_hba.conf 文件控制 PostgreSQL 使用的认证方法。要启用 LDAP 认证,您需要在 pg_hba.conf 文件中添加一行,指定要使用的 LDAP 服务器和方法。例如:
                host all all ldapserver=ldap.example.com ldapmethod=simple
                复制

                此行告诉 PostgreSQL 使用 ldap.example.com 上的 LDAP 服务器进行认证,使用“simple”方法。

                步骤 8: 重启 PostgreSQL

                修改 pg_hba.conf 文件后,您需要重启 PostgreSQL 服务以使更改生效。

                步骤 9: 测试 LDAP 连接

                您可以通过运行以下命令测试与 LDAP 服务器的连接:
                  ldapwhoami -h ldap.example.com -D "cn=admin,dc=example,dc=com" -w "adminpassword"
                  复制

                  此命令将以“cn=admin,dc=example,dc=com”用户和密码“adminpassword”绑定到 LDAP 服务器。如果连接成功,您应该看到一条消息,指示您当前绑定为的用户。

                  步骤 10: 测试 LDAP 认证

                  要测试与 PostgreSQL 的 LDAP 认证,您可以使用 psql 命令行界面连接到数据库。例如:
                    psql -U myldapuser -h localhost
                    复制

                    要测试与 PostgreSQL 的 LDAP 认证,您可以使用 psql 命令行界面连接到数据库。例如:
                      psql -U myldapuser -h localhost
                      复制

                      如果 LDAP 认证正确设置,您应该能够使用 myldapuser 的 LDAP 凭据连接到数据库。


                      03  
                      GSSAPI(通用安全服务应用程序接口)

                      GSSAPI 是一种认证方法,允许用户使用 Kerberos 向 PostgreSQL 进行认证。在本节中,我们将介绍如何为 PostgreSQL 设置 GSSAPI 认证并提供配置示例。

                      在开始之前,您需要有一个 Kerberos 基础设施和对其工作原理有基本了解。您还需要在运行 PostgreSQL 的服务器上安装 PostgreSQL 和 Kerberos 库(gssapi 和 gssapi_krb5)。

                      步骤 1: 配置 pg_hba.conf

                      pg_hba.conf 文件控制 PostgreSQL 使用的认证方法。要启用 GSSAPI 认证,您需要在 pg_hba.conf 文件中添加一行,指定要使用的 GSSAPI 方法。例如:
                        hostgssenc postgres postgres 192.168.0.102/32 gss include_realm=0
                        复制

                        此行告诉 PostgreSQL 使用 GSSAPI 进行认证,并且不在用户名中包含 Kerberos 领域。

                        步骤 2: 重启 PostgreSQL

                        修改 pg_hba.conf 文件后,您需要重启 PostgreSQL 服务以使更改生效。如果出现此错误,意味着您的服务器没有配置 --with-gssapi 选项。
                        2023-01-31 19:25:18.585 PKT [42302] LOG: hostgssenc 记录无法匹配,因为此构建不支持 GSSAPI
                        复制

                        步骤 3: Kerberos 配置

                        您需要配置 Kerberos 以与 PostgreSQL 协同工作。您需要为 PostgreSQL 服务器创建一个服务主体,并将其添加到 Kerberos keytab 文件中。

                        步骤 4: 测试 GSSAPI 连接

                        您可以通过运行以下命令测试 GSSAPI 连接:
                          kinit -k -t path/to/keytab postgres/your.postgres.host@YOURREALM.COM
                          复制

                          这个命令将为你在步骤 3 中创建的服务主体获取一个 Kerberos 票据。

                          步骤 5: 测试 GSSAPI 认证

                          要测试 PostgreSQL 的 GSSAPI 认证,您可以使用 psql 命令行界面连接到数据库。例如
                            psql "dbname=mydb host=myhost user=myuser"
                            复制

                            如果 GSSAPI 认证设置正确,您应该能够使用您的 Kerberos 凭据连接到数据库。


                            04  
                            SSPI(安全支持提供者接口)

                            SSPI 是一种认证方法,允许用户使用 Windows 内置的安全特性来认证 PostgreSQL。它类似于 GSSAPI,但特定于 Windows 操作系统。

                            PostgreSQL 服务器使用 SSPI 库与客户端协商使用 Kerberos 或 NTLM 协议的认证。要在 PostgreSQL 中设置 SSPI 认证,您必须配置 pg_hba.conf 文件以使用“sspi”方法,并重启 PostgreSQL 服务。

                            例如,要为来自本地主机的所有连接启用 SSPI 认证,您将在 pg_hba.conf 文件中添加以下行:
                              host all all 127.0.0.1/32 sspi
                              复制
                              这一行告诉 PostgreSQL 对所有来自 IP 地址 127.0.0.1 的连接使用 SSPI 进行认证,对应于 localhost。更改完成后,您需要重启 PostgreSQL 服务以使更改生效。要测试 SSPI 认证,您可以使用 psql 命令行界面连接到数据库。SSPI 认证仅在 Windows 上支持,并且在 PostgreSQL 服务器版本 9.1 或更高版本中可用。


                              05  
                              RADIUS(远程认证拨号用户服务)

                              RADIUS 是用于认证远程用户的广泛使用的协议。它也可以用来认证 PostgreSQL 数据库中的用户。在本博客文章中,我们将介绍如何为 PostgreSQL 设置 RADIUS 认证,并提供配置示例。

                              在开始之前,您需要访问 RADIUS 服务器并对其工作原理有基本了解。

                              步骤 1: 安装 FreeRADIUS

                              以下是在 Ubuntu 上安装和配置 RADIUS 服务器的步骤:
                              复制
                                sudo apt-get update sudo apt-get install freeradius freeradius-utils
                                复制

                                复制
                                步骤 2: 配置 RADIUS 服务器


                                • FreeRADIUS 的主配置文件位于 etc/freeradius/radiusd.conf。

                                • 用户文件位于 etc/freeradius/users。


                                步骤 3: 向 RADIUS 服务器添加用户
                                  sudo nano etc/freeradius/users
                                  复制

                                  为每个用户添加一个新条目,格式如下:
                                    username Auth-Type := Local, User-Password := "password"
                                    复制

                                    步骤 4: 重启 RADIUS 服务器
                                      sudo service freeradius restart
                                      复制

                                      步骤 5: 测试 RADIUS 服务器
                                        sudo radtest username password 127.0.0.1 0 testing123
                                        复制

                                        如果测试成功,您应该收到一个“Access-Accept”响应。

                                        步骤 6: 配置 pg_hba.conf

                                        pg_hba.conf 文件控制 PostgreSQL 使用的认证方法。要启用 RADIUS 认证,您需要在 pg_hba.conf 文件中添加一行,指定要使用的 RADIUS 服务器和方法。例如:
                                          host all all 0.0.0.0/0 radius radiusservers=192.168.1.1 radiussecrets=password radiusports=1812
                                          复制

                                          这一行告诉 PostgreSQL 使用 RADIUS 进行认证。

                                          步骤 7: 重启 PostgreSQL

                                          在更改 pg_hba.conf 和 radius.conf 文件后,您需要重启 PostgreSQL 服务以使更改生效。

                                          步骤 8: 测试 RADIUS 认证

                                          要测试 PostgreSQL 的 RADIUS 认证,您可以尝试使用 psql 命令行界面连接到数据库。例如
                                            psql -U username -h localhost
                                            复制

                                            如果 RADIUS 认证正确设置,您应该能够使用您的 RADIUS 凭据连接到数据库。


                                            06  
                                            结论

                                            综上所述,通过提供集中式用户访问管理并避免在数据库中存储密码,GSSAPI、LDAP和RADIUS这些外部认证方式能显著提升PostgreSQL数据库的安全性。GSSAPI利用Kerberos进行用户认证,LDAP通过LDAP服务器进行用户认证,而RADIUS则通过RADIUS服务器完成用户认证工作。

                                            值得一提的是,GSSAPI和RADIUS只支持PostgreSQL服务器9.1及以后的版本,而LDAP则是所有版本都内置支持的特性。除了外部认证方式,PostgreSQL服务器还支持基于密码和客户端证书的认证方式。为保障数据的安全访问,推荐在远程连接和生产环境中采用基于密码或外部的认证方法。


                                            翻译工具:kimi moonshot
                                            原文作者:Ibrar Ahmed
                                            原文链接:
                                            https://www.percona.com/blog/postgresql-database-security-external-server-based-authentication/


                                            END

                                            为促进团队内外的沟通联系,我们Klustron团队的bbs论坛开始上线,欢迎各位同学使用!链接:https://forum.klustron.com/,或者点击文末“阅读原文”,即可跳转

                                            论坛目前是测试版,可能还存在不稳定的现象,欢迎各位老师、朋友共享信息,如果遇到问题还请谅解。

                                            欢迎大家下载和安装Klustron数据库集群,并免费使用(无需注册码)

                                            Klustron 完整软件包下载:
                                            http://downloads.klustron.com/

                                            如需购买请邮箱联系sales_vip@klustron.com,有相关问题欢迎添加下方小助手微信联系🌹

                                            产品文档

                                            Klustron 快速入门:
                                            https://doc.klustron.com/zh/Klustron_Instruction_Manual.html

                                            Klustron 快速体验指南:
                                            https://doc.klustron.com/zh/Klustron_Quickly_Guide.html

                                            Klustron 功能体验范例:
                                            https://doc.klustron.com/zh/Klustron-function-experience-example.html

                                            Klustron 产品使用和测评指南:
                                            https://doc.klustron.com/zh/product-usage-and-evaluation-guidelines.html


                                             点击👆上方,关注获取源代码及技术信息~





                                            文章转载自KunlunBase 昆仑数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                            评论