Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.10.3. 在强制模式中使用 SELinux 部署 Tang 服务器

Red Hat Enterprise Linux 7.7 及更新版本提供了 tangd_port_t SELinux 类型,Tang 服务器可在 SELinux enforcing 模式下作为受限服务部署。

先决条件

  • 已安装 policycoreutils-python-utils 软件包及其依赖项。

流程

  1. 要安装 tang 软件包及其依赖项,以 root 用户身份输入以下命令:
    ~]# yum install tang
  2. 选择一个未设置的端口,例如 7500/tcp,并允许 tangd 服务绑定到该端口:
    ~]# semanage port -a -t tangd_port_t -p tcp 7500
    请注意,某个端口一次只能由一个服务使用,因此尝试使用已占用的端口意味着 ValueError: Port 已定义的 错误消息。
  3. 在防火墙中打开端口:
    ~]# firewall-cmd --add-port=7500/tcp
    ~]# firewall-cmd --runtime-to-permanent
  4. 使用 systemd 启用 tangd 服务:
    ~]# systemctl enable tangd.socket
    Created symlink from /etc/systemd/system/multi-user.target.wants/tangd.socket to /usr/lib/systemd/system/tangd.socket.
  5. 创建覆盖文件:
    ~]# systemctl edit tangd.socket
  6. 在以下编辑器屏幕中,打开了位于 /etc/systemd/system/tangd.socket.d/ 目录中的空 override.conf 文件,通过添加以下行将 Tang 服务器的默认端口从 80 改为之前选择的编号:
    [Socket]
    ListenStream=
    ListenStream=7500
    保存文件并退出编辑器。
  7. 重新载入更改的配置并启动 tangd 服务:
    ~]# systemctl daemon-reload
  8. 检查您的配置是否正常工作:
    ~]# systemctl show tangd.socket -p Listen
    Listen=[::]:7500 (Stream)
  9. 启动 tangd 服务:
    ~]# systemctl start tangd.socket
由于 tangd 使用 systemd 套接字激活机制,因此服务器将在第一次连接登录时立即启动。在第一次启动时会自动生成一组新的加密密钥。
要执行手动生成密钥等加密操作,请使用 jose 工具。输入 jose -h 命令或查看 jose(1) man page 了解更多信息。

例 4.4. 轮转 Tang 密钥

定期轮转密钥非常重要。您轮转它们的确切间隔取决于您的应用程序、密钥大小以及机构策略。有关一些常见建议,请参阅Cryptary Key Length Proendation 页面。
要轮转密钥,首先要在密钥数据库目录中生成新密钥,通常是 /var/db/tang。例如,您可以使用以下命令创建新签名和交换密钥:
~]# DB=/var/db/tang
~]# jose jwk gen -i '{"alg":"ES512"}' -o $DB/new_sig.jwk
~]# jose jwk gen -i '{"alg":"ECMR"}' -o $DB/new_exc.jwk
将旧密钥重命名为具有从广告中 隐藏的.请注意,以下示例中的文件名与密钥数据库目录中真实和唯一的文件名不同。
~]# mv $DB/old_sig.jwk $DB/.old_sig.jwk
~]# mv $DB/old_exc.jwk $DB/.old_exc.jwk
Tang 立即获取所有更改。不需要重启。
此时,新客户端绑定采用新密钥,旧客户端可以继续使用旧密钥。当您确定所有旧客户端都使用新密钥时,您可以删除旧密钥。
警告
请注意,在客户端仍在使用旧密钥时删除旧密钥可能会导致数据丢失。

4.10.3.1. 部署高可用性系统

Tang 提供两种构建高可用性部署的方法:
  1. 客户冗余(推荐)
    客户端应配置为绑定到多个 Tang 服务器。在此设置中,每个 Tang 服务器都有自己的密钥,客户端可以通过联系这些服务器的子集来进行解密。Clevis 已通过其 sss 插件支持此工作流。
    有关此设置的详情,请查看以下 man page:
    • Tang(8) 节高可用性
    • Clevis(1) 节 Shamir's Secret Sharing
    • clevis-encrypt-sss(1)
    红帽建议在高可用性部署中使用这个方法。
  2. 密钥共享环
    出于冗余目的,可以部署多个 Tang 实例。要设置第二个或后续的实例,请通过 SSH 安装 tang 软件包,并使用 rsync 将密钥目录复制到新主机上。请注意,红帽不推荐此方法,因为共享密钥会增加关键威胁的风险,需要额外的自动化基础架构。