HAS配置文件密码加密
功能描述
启动has服务之前,需要在 HAS 的 YAML 配置文件中编辑 authentication 信息,通常包括 superuser 和 replicatioin 的用户名、密码。但将密码明文暴露在配置文件中是不安全的。为了解决这一问题,Vastbase引入了has_encryption工具对配置文件中的密码进行加密。
has_encryption使用HMAC算法对用户输入的明文密码进行计算并输出密文,数据库管理员获取后可以将其填写在 YAML 文件中对应的密码处,使显示在 YAML 文件中的密码为密文。
注意事项
has_encryption工具仅在HAS V1.2 Build 37 及之后的版本中支持。
请在安装数据库的操作系统用户下使用has_encryption工具。
使用流程
1、可执行文件has_encryption位于安装包HAS_VastbaseG100_${平台}_V1.2_${datetime}.zip
内,切换到解压后该文件所在的目录下,为可执行文件授权:
su - root #切换到root用户
cd /data/soft/ #切换至文件所在目录,此处以/data/soft为例
chmod +x has_encryption #授予可执行权限
chown vastbase:vastbase has_encryption #设置文件的所属者/用户组
2、切换至数据库用户,此处以vastbase用户为例:
su - vastbase
3、执行has_encryption工具,根据操作需求选择以下方式。
方式一:非交互式
执行has_encryption命令的同时指定明文密码,has_encryption工具将生成一个随机数并保存至 ~/.rand
文件中,对随机数进行HMAC计算后的密文保存在 ~/.cipher
文件中。
./has_encryption --password=Admin@123
上述命令生成的文件保存在当前登录用户的用户主文件夹下。重复执行has_encryption命令生成的新文件将覆盖掉旧文件。(注意解密过程需要用到相应 rand 文件。)
上述命令的执行效果如下:
方式二:交互式
通过此方式进行加密时,支持自定义 rand 文件的位置。
1、执行has_encryption命令。
./has_encryption
2、选择是否生成新的 rand 文件,并指定rand文件的保存位置。
如果选择“是”,则应输入 rand 文件的保存路径;按<Enter>键将保存 rand 文件至默认位置,即当前登录用户的用户主文件夹下 (
~/.rand
)。如图所示:保存位置可能已经存在同名文件,此时应选择是否对其进行覆盖(重写),选择是,则会将旧的文件覆盖,如果选择否,则需要重新指定一个保存位置。
如果选择“否”,则表示使用旧的 rand 文件进行加密,此时需要用户指定 rand 文件的位置。按<Enter>键表示在默认位置 (
~/.rand
)读取rand文件。如图所示:
- 如果输入的路径包含空格,则会提示路径不合法,需要重新输入合法路径。
- .rand 文件中保存的是二进制格式的随机数。一个 rand 文件对应一个计算后的密文。
3、输入密码:
输入的密码应为加密前的明文密码,第二次输入的密码需与前一次输入的内容完全相同。完成后,即可在屏幕上获取输出的密文。如图所示:
使用.rand文件中保存的随机数计算后得到的密文保存在 ~/.cipher
文件中。
4、得到密文,回填密码,并在 YAML 文件中配置 rand_file_path。
rand_file_path 表示 rand 文件的位置。该字段应配置在 superuser 和 replication 下,分别指定两个密码对应的 rand 文件位置。如不配置此字段,表示从默认位置(~/.rand
)读取 rand 文件。
解密流程
对密文进行解密时,需要用到此前生成的 rand 文件。
在 HAS 服务需要用到密码时,会先读取 rand 文件,生成用于解密的密钥。因此 HAS 服务需要根据 YAML 文件中配置的 superuser 以及 replication 的 rand_file_path 字段来获取 rand 文件的位置。如果未配置此字段,那么 HAS 服务在使用时会从默认路径(~/.rand
)读取文件。
读取 rand 文件之后,需要从 YAML 文件中读取密码的密文,进行解密。注意,使用的密码必须和 rand 文件对应,否则会导致解密失败,HAS 服务无法正常运行。