是在测评某集团的等保项目时遇到的,是一整套华为的私有化部署,他们的数据库还是阉割过的,和华为的人联系了很多次才完成了数据库的测评QAQ。本次测评的对象为私有云平台,部分记录需要按照现场实际情况来判断。
su - gaussdba
gaussdb --version
以下为登录/连接Gaussdb数据库的方法
(1)登录首节点并切换至root用户
(2)导入环境变量
(3)执行cps template-instance-list --service gaussdb gaussdb命令查看gaussdb部署节点
(4)登录gaussdb主节点,即上一步status为“active”的节点,切换至root用户
(5)执行su - gaussdba切换至gaussdba用户
(6)执行gsql -d postgres -U <username>连接数据库
例如,执行gsql -d postgres -U gaussdba,以gaussdba用户登录数据库
(7)输入当前用户的密码,完成登录(默认密码可查看账户一览表)
(1)连接数据库时,需要进行身份鉴别,如果密码错误,提示“Invalid username/password,login denied.”
检查方法:
例如,使用gaussdba账户连接数据库,输入错误的密码,提示“Invalid username/password,login denied.”
(2)执行select * from pg_user;命令,列出所有用户,USESYSID字段表示用户的ID,该值唯一,表明用户身份标识具有唯一性。
检查方法:
登录gaussdb主节点,切换至root用户,执行su - gaussdba切换用户,执行gsql -d postgres连接数据库,输入gaussdba用户的密码,连接成功之后,执行select * from pg_user;命令,列出所有用户,USESYSID字段表示用户的ID,该值唯一,表明用户身份标识具有唯一性。
(3)查看账户一览表,gaussdb所有账户都有默认密码。连接数据库时,需要输入密码,表明用户默认口令不为空。
检查方法:
依次使用gaussdba、select_user、openstack账户连接数据库,都需要输入密码,说明账户的口令不为空。
(4)Gaussdb的账户是机机账户,机机账户的密码永不过期,不要求用户周期性的修改账户密码。修改机机账户的密码,可能导致业务中断,因此,建议保持默认密码。这条是华为人说的。
若需要修改默认密码,请按照账户一览表进行操作。
(5)产品文档中,有关于密码复杂度的要求。修改密码时,输入不符合密码复杂度要求的密码提示不满足密码复杂度要求,修改密码的方法可查看账户一览表
(注意:修改密码属于高危操作,请谨慎操作)。
检查方法:
修改密码时,输入不符合密码复杂度要求的密码提示不满足密码复杂度要求。
导入环境变量,然后执行PasswordManager
防暴力破解机制
(1)登录失败锁定账户
登录gaussdb主节点,执行cps template-params-show --service gaussdb gaussdb查看,默认配置连续输错密码3次,账户锁定300秒。
(2)超时自动退出
默认置超时1800秒自动断开连接。登录gaussdb主节点,连接数据库之后,1800秒无操作,会自动断开。
登录首节点切换至root用户,执行su - gaussdba切换用户,执行gsql -d postgres连接数据库,输入gaussdba用户的密码,连接成功之后,再执行\set查看。
GaussDB支持通过SSL加密客户端和服务器之间、主机和备机之间的通讯。SSL通讯使用的加密算法为XXX(以实际查询为准)。
检查方法:
(1)查看传输协议
登录首节点切换至root用户,导入环境变量,执行cps template-instance-list --service gaussdb gaussdb命令查看gaussdb部署节点
登录gaussdb主节点,切换至root用户,导入环境变量,执行cps template-params-show --service gaussdb gaussdb命令查看传输协议,采用TLS1.2。
(2)查看加密算法
进入/opt/fusionplatform/data/gaussdb_data/data目录,查看相应配置
cat postgresql.conf | grep ssl_ciphers
仅支持机机后台登录,无页面登录方式,采用用户名+口令方式鉴别身份,无其他鉴别技术。
数据库用户分为管理员用户(gaussdba)、业务用户(Openstack)和业务用户(Select_user)。不同的账户权限不同。
gaussdba: GaussDB数据库管理员帐户,可用于登录数据库执行相关运维操作。
openstack: GaussDB数据库业务帐户
select_user: GaussDB数据库业务帐户
检查方法:
(1)登录首节点切换至root用户,执行su - gaussdba切换用户,执行gsql -d postgres连接数据库,输入gaussdba用户的密码,连接成功之后,执行select * from pg_user;命令,查看所有用户
(2)执行select * from information_schema.routine_privileges where grantee='user_name';命令查询user_name用户所拥有的权限,user_name替换成实际的用户名,并采用全大写字母。
例如,执行select * from information_schema.routine_privileges where grantee='GAUSSDBA'; 查看GAUSSDBA的权限。
默认账户的默认口令已经修改
检查方法:
(1)登录数据库之后,执行select ROLNAME from pg_authid where oid=10;命令,查看默认用户。
(2)在账户一览表中查看默认账户及其密码。
只存在如下几个用户,不存在多余的、过期的账户,不存在共享账户。
gaussdba: GaussDB数据库管理员帐户,可用于登录数据库执行相关运维操作。
openstack: GaussDB数据库业务帐户
select_user: GaussDB数据库业务帐户
检查方法:
(1)登录数据库之后,执行select * from pg_user;命令,查看所有用户。
(2)查看账户一览表,查看gaussdb的所有账户,不存在多余的账户,不存在共享账户,gaussdb相关的所有账户都是机机账户,永不过期。
数据库用户分为管理员用户(gaussdba)、业务用户(Openstack)和业务用户(Select_user)。分别为用户分配了相应的权限,都是业务所需的最小权限。
检查方法:
(1) 登录数据库之后,执行\du <username>命令,查看当前用户的权限
例如,执行\du GAUSSDBA查看gaussdba用户的权限。
(2)或者执行\du查看所有用户的权限
数据库data目录权限最大为0700,只允许数据库用户访问文件,其它用户不能访问
检查方法:
进入数据库目录查看文件权限
登录首节点后台,切换root之后,执行su - gaussdba切换gaussdba用户,执行cd $GAUSSDATA进入gaussdb的data目录,然后查看权限。
数据库data目录权限最大为0700,只允许数据库用户访问文件,其它用户不能访问
检查方法:
进入数据库目录查看文件权限
登录首节点后台,切换root之后,执行su - gaussdba切换gaussdba用户,执行cd $GAUSSDATA进入gaussdb的data目录,然后查看权限。
无
已经开启审计功能
检查方法:
登录数据库之后,执行show audit_enabled;命令查看,ON表示已经开启审计功能
审计日志信息包时间(Time)、类型(Type)、结果(Result)\用户(User)、数据库(DATABASE)、客户端信息(CLIENT_CONNINFO)、审计对象(OBJECT_NAME)以及详细语句(DETAIL_INFO),对于删除用户/表/库等高危操作,会进行审计记录。
检查方法:
Gaussdb的日志目录为/var/log/fusionsphere/component/gaussdb,可以进入该目录下查看日志审计记录。
也可以以gaussdba用户登录数据库之后,执行select * from pg_query_audit('2020-09-04 08:00:00','2020-09-10 23:59:59');命令,查看审计文件(时间需改为需要查询的审计日志的起始时间)。
审计日志是二进制文件,只能具有审计权限的数据库用户登陆数据库查看,通过函数pg_query_audit查看。
检查方法一:
系统中的文件都有访问权限控制,只有合法的用户才可以访问,gaussdb审计日志见Openstack主机节点/var/log/fusionsphere/component/gaussdb目录,查看该目录下文件的权限,文件权限符合要求。
检查方法二:
(1)用gaussdba用户登录数据库之后,执行select * from pg_query_audit('2020-09-04 08:00:00','2020-09-10 23:59:59');命令,查看审计文件(时间需改为需要查询的审计日志的起始时间)。结果如下图,查询成功。
(2)用openstack用户登录数据库之后,执行select * from pg_query_audit('2020-09-04 08:00:00','2020-09-10 23:59:59');命令,查看审计文件(时间需改为需要查询的审计日志的起始时间)。结果如下图,没有权限,提示“ERROR: permission denied to query audit”。
审计进程是数据库的子进程,异常终止后,会由主进程进行拉起
检查方法:
登录首节点后台,切换root之后,导入环境变量,执行cps template-instance-list --service gaussdb gaussdb命令查看gaussdb部署的主节点,即status为active的节点
登录gaussdb主节点,切换root之后,执行ps -ef | grep gaussdba | grep -v idle命令查看gaussdb的auditor process,即审计进程;然后,执行kill -9 <进程号>杀掉当前的审计进程,等待几秒,再次执行ps -ef | grep gaussdba | grep -v idle命令查看auditor process进程已经自动拉起。(注意:kill进程是高危操作,不要在现网环境执行)
默认遵循最小化安装原则,需现场询问
数据库连接通过pg_hba.conf白名单控制连接的IP/数据库名/用户
检查方法:
登录首节点后台,切换root之后,执行su - gaussdba切换gaussdba用户,执行cd $GAUSSDATA进入gaussdb的data目录,然后查看pg_hba.conf文件的配置。
产品会及时修复漏洞并发布补丁,需要现场询问是否定期更新
GaussDB支持通过SSL加密客户端和服务器之间、主机和备机之间的通讯。SSL通讯使用的加密算法为XXX(以实际查询为准)。
检查方法:
(1)查看传输协议
登录首节点切换至root用户,导入环境变量,执行cps template-instance-list --service gaussdb gaussdb命令查看gaussdb部署节点
登录gaussdb主节点,切换至root用户,导入环境变量,执行cps template-params-show --service gaussdb gaussdb命令查看传输协议,采用TLS1.2。
(2)查看SSL加密算法
进入/opt/fusionplatform/data/gaussdb_data/data目录,查看相应配置
cat postgresql.conf | grep ssl_ciphers
加密存储
重要数据加密存储,例如,账户密码存储时,采用pbkdf2-sha512加密。
GaussDB支持通过SSL加密客户端和服务器之间、主机和备机之间的通讯。SSL通讯使用的加密算法为XXX(以实际查询为准)。
检查方法:
(1)查看传输协议
登录首节点切换至root用户,导入环境变量,执行cps template-instance-list --service gaussdb gaussdb命令查看gaussdb部署节点
登录gaussdb主节点,切换至root用户,导入环境变量,执行cps template-params-show --service gaussdb gaussdb命令查看传输协议,采用TLS1.2。
(2)查看SSL加密算法
进入/opt/fusionplatform/data/gaussdb_data/data目录,查看相应配置
cat postgresql.conf | grep ssl_ciphers
加密存储
重要数据加密存储,例如,账户密码存储时,采用pbkdf2-sha512加密。
GaussDB采用了主备双机方案,能在很大程度上保证数据库服务的可用性和数据的安全性。此外,系统默认每天凌晨03:00定时备份GaussDB数据库,也可以手动执行命令触发备份。备份策略支持重新配置,具体可查看产品文档。
检查方法:
登录首节点首节点,切换至root用户,导入环境变量,执行backup policy-get查看备份策略,执行backup package-get --service gaussdb查看备份结果。
支持异地配置,但需手工配置异地备份服务器,产品文档中提供了配置第三方备份服务器的方法,实际需要现场询问是否具备异地机房
数据库采用主备模式部署
检查方法:
登录首节点,切换至root用户,导入环境变量,执行cps template-instance-list --service gaussdb gaussdb命令查看部署模式。查询结果中,状态为“active”的节点为主节点,状态为“standby”的节点为备节点。
存储空间删除时会进行格式化清除