连接配置

禁止侦听主机上所有IP地址

说明

参数listen_addresses指定服务器在哪些TCP/IP地址上侦听客户端连接。侦听地址配置参数listen_addresses不允许包含表示所有IP地址的“*”或“0.0.0.0”或“::”字符串。对于包含多个网卡的主机,侦听所有IP地址将无法做到网络隔离,通过禁止侦听主机上所有IP地址可以阻止来自其他网络的恶意连接请求。

实现

检查方法:

执行如下SQL语句检查参数listen_addresses配置,如果返回不为空则表示失败。

SELECT name,setting FROM pg_settings WHERE name = 'listen_addresses' AND
(position('*' in setting) OR position('0.0.0.0' in setting) OR position('::' in setting));

修复方法:

避免侦听主机上所有网卡地址,设置参数listen_addresses为“localhost”或需要接收业务请求的网卡IP地址,多个地址用逗号隔开,然后重启数据库。侦听地址以localhost和192.168.1.1为例命令如下。

gs_guc set -Z datanode -N all -I all -c "listen_addresses='localhost,192.168.1.1'"
gs_om -t stop && gs_om -t start

确保对外服务端口使用非默认端口号

说明

参数port为数据库服务侦听的TCP端口号。采用默认端口号容易被恶意攻击者获取并攻击,需将对外服务端口号配置为非默认端口号。默认端口号请参考产品相关文档说明。

实现

检查方法:

以端口号5432为例,如果port参数值为默认端口号则失败。

SELECT name,setting FROM pg_settings WHERE name = 'port' AND setting = '5432';

修复方法:

用户需在安装数据库时通过配置文件指定各个实例的端口号。

确保数据库实例的最大连接数配置正确

说明

参数max_connections控制数据库DN实例的最大连接数。参数设置过大可能引起数据库请求更多的System V共享内存或者信号量,导致超出操作系统默认配置允许的值。用户需要根据业务规格确定参数值的大小或咨询技术支持。

实现

检查方法:

检查max_connections参数配置,用户需要根据业务规格确定配置多大并发连接数目。

openGauss=# show max_connections;
 max_connections
-----------------
 5000
(1 row)

修复方法:

以配置最大连接数为5000为例,通过如下命令修改参数 max_connections的值,然后重启数据库。

gs_guc set -Z datanode -N all -I all -c "max_connections=5000"
gs_om -t stop && gs_om -t start

确保Database的最大连接数配置正确

说明

为了控制访问数据库的会话数量,推荐配置会话数量限制在1024个以内。若设置参数datconnlimit为-1,表示不限制连接数据库的会话数量。

实现

检查方法:

执行如下SQL语句检查是否存在不限制连接数的数据库:

SELECT datname FROM pg_database WHERE datistemplate = false AND (datconnlimit = -1 OR datconnlimit > 1024);

修复方法:

UPDATE pg_database SET datconnlimit=<CONN_LIMIT_VALUE> WHERE datname=<DATABASE_NAME>;

其中<CONN_LIMIT_VALUE>表示设置的数据库允许的最大会话连接数,<DATABASE_NAME>为数据库名称。

确保系统管理员使用的连接数配置正确

说明

参数sysadmin_reserved_connections表示预留给数据库系统管理员的最少连接数,为系统管理员预留连接通道,避免连接被普通用户或恶意用户占用导致管理员无法连接。此参数值必须小于max_connections的值。

实现

检查方法:

openGauss=# show sysadmin_reserved_connections;
sysadmin_reserved_connections
-------------------------------
3
(1 row)

修复方法:

修改参数sysadmin_reserved_connections为3,然后重启数据库。

gs_guc set -Z datanode -N all -I all -c "sysadmin_reserved_connections=3"
gs_om -t stop && gs_om -t start

确保用户的最大连接数配置正确

说明

在openGauss数据库中,不应该允许用户无限制数量的连接。如果用户参数rolconnlimit设置为-1,表示允许无限制数量的并发连接。根据业务需求限制不同用户的最大连接数,可避免连接被某个用户全部占用。

实现

检查方法:

执行以下SQL语句检查是否存在不限制连接数的用户,其中以gs_role开头的为内置角色不允许连接、无需检查。

SELECT rolname, rolconnlimit FROM pg_roles WHERE rolname NOT LIKE 'gs_role%' AND rolconnlimit = -1;

修复方法:

ALTER ROLE <role_name> CONNECTION LIMIT <connection_num>;

其中<role_name>表示用户名,<connection_num>表示配置的最大连接数。

确保UNIX域套接字的访问权限配置正确

说明

参数unix_socket_permissions用于设置UNIX域套接字的访问权限。推荐配置是0700(只有当前连接数据库的用户自己可以访问,同组或者其他人都没有权限),满足文件权限最小化要求,避免文件被其他用户访问或篡改而影响套接字通信功能。

实现

检查方法:

检查unix_socket_permissions参数配置值是否为0700,如果不是则失败。

openGauss=# show unix_socket_permissions;
 unix_socket_permissions
-------------------------
0700
(1 row)

修复方法:

修改unix_socket_permissions参数值为0700,然后重启数据库。

gs_guc set -Z datanode -N all -I all -c "unix_socket_permissions=0700"
gs_om -t stop && gs_om -t start

确保除服务端节点外无host条目使用trust认证

说明

服务端节点部署在安全内网环境中,仅允许初始用户在服务端使用trust认证方式通讯。应配置pg_hba.conf除服务端节点外没有host条目使用trust认证方法。trust认证即无需认证即可允许连接。目前仅允许与运行数据库的OS用户同名的初始用户在服务端本地连接使用trust认证,其他远程连接或非初始用户连接等场景都需要经过服务端认证。用户在pg_hba.conf配置文件中增加客户端host条目时应避免使用trust认证方法,否则会导致与服务端连接失败。

实现

检查方法:

通过如下shell命令检查pg_hba.conf配置中是否存在trust认证条目,其中${GAUSSDATA}为DN的数据目录。此检查需要人工确认哪些是服务端节点IP和本地环回IP,其中127.0.0.1和::1为本地环回IP,需确保除服务端节点IP和本地环回IP外无host条目使用trust认证。

grep -P '^[^#]*host(ssl|nossl)?\s+.+[Tt][Rr][Uu][Ss][Tt]\s*$' ${GAUSSDATA}/pg_hba.conf

修复方法:

除了初始用户连接服务端节点外,文件pg_hba.conf中其他host项配置为非trust认证方法。

确保没有host条目使用md5认证

说明

md5认证方式存在安全风险,可能导致密码被破解,应采用更安全的sha256认证或证书认证方式。保留md5认证方式是为了兼容开源社区工具,但在生产环境中禁止使用md5认证。

实现

检查方法:

通过如下shell命令检查pg_hba.conf配置中是否存在md5认证条目,其中${GAUSSDATA}为DN的数据目录。

grep -P '^[^#]*host(ssl|nossl)?\s+.+[Mm][Dd][5]\s*$' ${GAUSSDATA}/pg_hba.conf

修复方法:

为客户端host项配置认证方式为sha256。例如,配置用户user1通过IP为192.168.0.1的客户端连接数据库db1,认证方式为sha256,配置命令如下。

gs_guc reload -Z datanode -N all -I all -h "host db1 user1 192.168.0.1/32 sha256"

确保没有hostnossl条目

说明

hostnossl条目指定不使用SSL加密连接,而host条目允许SSL和非SSL连接,hostssl则只能使用SSL连接。从安全角度考虑,推荐使用SSL加密连接对传输数据加密,避免信息泄露。

实现

检查方法:

通过如下shell命令检查pg_hba.conf配置中是否存在hostnossl条目,其中${GAUSSDATA}为DN的数据目录。

grep -P '^[^#]*hostnossl' ${GAUSSDATA}/pg_hba.conf

修复方法:

将配置文件pg_hba.conf中所有hostnossl条目改为hosthostssl

确保没有host条目的数据库指定为all

说明

host连接条目若指定数据库为all,则允许用户连接到任何一个数据库。在满足业务需求的前提下,建议为不同的用户或客户端IP指定所需连接的数据库,避免不同业务之间相互影响。

实现

检查方法:

通过如下shell命令检查pg_hba.conf配置中是否存在数据库指定为all的条目,其中${GAUSSDATA}为DN的数据目录。此检查需要人工确认哪些是服务端节点IP和本地环回IP(如127.0.0.1和::1),确保除服务端节点IP和本地环回IP外无host条目的数据库指定为all。

grep -P '^[^#]*host(ssl|nossl)?\s+[Aa][Ll][Ll]' ${GAUSSDATA}/pg_hba.conf

修复方法:

除服务端内部连接外,根据业务需要将配置文件pg_hba.conf中host、hostssl条目中的数据库为all的条目修改为需要连接的数据库。

确保没有host条目的用户指定为all

说明

host条目配置user为all表示允许所有用户连接到数据库。推荐host条目的user取值仅为需要连接数据库的用户。

实现

检查方法:

通过如下shell命令检查pg_hba.conf配置中是否存在用户指定为all的条目,其中${GAUSSDATA}为DN的数据目录。此检查需要人工确认哪些是服务端节点IP和本地环回IP(如127.0.0.1和::1),需确保除服务端节点IP和本地环回IP外无host条目的用户指定为all。

grep -P '^[^#]*host(ssl|nossl)?\s+\S+\s+[Aa][Ll][Ll]' ${GAUSSDATA}/pg_hba.conf

修复方法:

除服务端内部连接外,根据业务需要将配置文件pg_hba.conf中host、hostssl对应用户为all的条目修改为需要连接数据库的用户。

确保没有host条目的源地址指定为0.0.0.0/0

说明

host条目配置源地址为0.0.0.0/0意味着允许任意IP连接到数据库,这可能导致数据库被恶意用户进行网络攻击,影响数据库的安全性。推荐host条目配置的源地址仅为需要连接数据库的IP。

实现

检查方法:

通过如下shell命令检查pg_hba.conf配置中是否存在源地址指定为0.0.0.0/0的条目,其中${GAUSSDATA}为DN的数据目录。

grep '0.0.0.0/0' ${GAUSSDATA}/pg_hba.conf

修复方法:

在配置文件pg_hba.conf中删除所有host、hostssl源地址为0.0.0.0/0的条目,或将地址改为需要连接数据库的客户端IP地址。

确保服务端使能SSL连接

说明

SSL协议是为网络通信提供安全及数据完整性的一种安全协议。在使用数据库过程中应使用SSL协议进行TCP/IP连接以确保数据传输安全。参数ssl用于控制服务端是否使能SSL连接,参数为on表示使能SSL,此时服务端允许客户端通过SSL连接或非SSL连接,如果设置为off则只能通过非SSL连接。有关创建服务器私钥和证书的细节信息,可以参考openGauss的产品文档。

实现

检查方法:

检查参数ssl的配置是否为on,如果不为on则失败。

openGauss=# show ssl;
 ssl
-----
 on
(1 row)

修复方法:

配置参数ssl参数为on,然后重启数据库。

gs_guc set -Z datanode -N all -I all -c "ssl=on"
gs_om -t stop && gs_om -t start
意见反馈
编组 3备份
    openGauss 2024-12-10 00:55:52
    取消