11.3. 部署 SELinux 处于 enforcing 模式的 Tang 服务器

您可以使用 Tang 服务器在启用了 Clevis 的客户端中自动解锁 LUKS 加密卷。在最小的场景中,您可以通过安装 tang 软件包并输入 systemctl enable tangd.socket --now 命令在端口 80 上部署 Tang 服务器。以下示例流程演示了运行在自定义端口上的 Tang 服务器作为 SELinux enforcing 模式下受限制的服务的部署。

先决条件

  • policycoreutils-python-utils 包及其依赖项已经安装。
  • firewalld 服务正在运行。

步骤

  1. 要安装 tang 软件包及其依赖项,请以 root 用户身份输入以下命令:

    # dnf install tang
  2. 选择一个未被占用的端口,例如 7500/tcp,并允许 tangd 服务绑定到该端口:

    # semanage port -a -t tangd_port_t -p tcp 7500

    请注意,一个端口只能供一个服务使用,因此试图使用一个已有的端口意味着 ValueError:Port already defined 错误信息。

  3. 在防火墙中打开端口:

    # firewall-cmd --add-port=7500/tcp
    # firewall-cmd --runtime-to-permanent
  4. 启用 tangd 服务:

    # systemctl enable tangd.socket
  5. 创建覆盖文件:

    # systemctl edit tangd.socket
  6. 在以下编辑器屏幕中,其打开了位于 /etc/systemd/system/tangd.socket.d/ 目录中的一个空 override.conf 文件,通过添加以下行将 Tang 服务器的默认端口从 80 改为之前选择的端口号:

    [Socket]
    ListenStream=
    ListenStream=7500
    重要

    在以 # Anything between here# Lines below this 开头的行之间插入之前的代码片段,否则系统会丢弃您的更改。

  7. Ctrl+O 并按 Enter 保存更改。按 Ctrl+X 退出编辑器。
  8. 重新载入更改的配置:

    # systemctl daemon-reload
  9. 检查您的配置是否正常工作:

    # systemctl show tangd.socket -p Listen
    Listen=[::]:7500 (Stream)
  10. 启动 tangd 服务:

    # systemctl restart tangd.socket

    由于 tangd 使用了 systemd 套接字激活机制,因此服务器会在第一次连接进来时就立即启动。在第一次启动时会自动生成一组新的加密密钥。要执行手动生成密钥等加密操作,请使用 jose 工具。

其他资源

  • tang (8), semanage (8), firewall-cmd (1), jose (1), systemd.unit (5), 和 systemd.socket (5) 书册页。