From 4c7c1147f9ac9659a166cf24fc7d102f43aa389f Mon Sep 17 00:00:00 2001 From: Nikita Dubrovskii Date: Mon, 22 Aug 2022 14:17:08 +0200 Subject: [PATCH] s390x: secex: decrypt ignition config on firstboot --- manifests/bootable-rpm-ostree.yaml | 1 + .../coreos-secex-ignition-decrypt.service | 17 ++++++++++++++++ .../coreos-secex-ignition-decrypt.sh | 20 +++++++++++++++++++ .../35coreos-ignition/module-setup.sh | 11 ++++++++++ .../emergency-shell.sh | 4 ++-- 5 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/coreos-secex-ignition-decrypt.service create mode 100755 overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/coreos-secex-ignition-decrypt.sh diff --git a/manifests/bootable-rpm-ostree.yaml b/manifests/bootable-rpm-ostree.yaml index c93ecbeec6..519e3d8748 100644 --- a/manifests/bootable-rpm-ostree.yaml +++ b/manifests/bootable-rpm-ostree.yaml @@ -29,6 +29,7 @@ packages-s390x: - /usr/sbin/zipl # for Secure Execution - veritysetup + - /usr/bin/gpg packages-x86_64: - grub2 grub2-efi-x64 efibootmgr shim - microcode_ctl diff --git a/overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/coreos-secex-ignition-decrypt.service b/overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/coreos-secex-ignition-decrypt.service new file mode 100644 index 0000000000..02283bc3d0 --- /dev/null +++ b/overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/coreos-secex-ignition-decrypt.service @@ -0,0 +1,17 @@ +[Unit] +Description=CoreOS Secex Ignition Config Decryptor +ConditionPathExists=/etc/initrd-release +ConditionPathExists=/run/coreos/secure-execution +DefaultDependencies=false + +OnFailure=emergency.target +OnFailureJobMode=isolate + +# Run after virtio_blk and before Ignition +After=coreos-gpt-setup.service +Before=ignition-fetch-offline.service + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/sbin/coreos-secex-ignition-decrypt diff --git a/overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/coreos-secex-ignition-decrypt.sh b/overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/coreos-secex-ignition-decrypt.sh new file mode 100755 index 0000000000..f0dcc2e35b --- /dev/null +++ b/overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/coreos-secex-ignition-decrypt.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -euo pipefail + +disk=/dev/disk/by-id/virtio-ignition_crypted +conf=/usr/lib/ignition/user.ign +pkey=/etc/ignition.asc + +cleanup() { + rm -f "${pkey}" + rm -rf "${tmpd}" +} +tmpd=$(mktemp -d) && trap cleanup EXIT + +if [ ! -e "${disk}" ]; then + echo "Ignition config must be encrypted" + exit 1 +fi + +gpg --homedir "${tmpd}" --import "${pkey}" +gpg --homedir "${tmpd}" --skip-verify --output "${conf}" --decrypt "${disk}" diff --git a/overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/module-setup.sh b/overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/module-setup.sh index f53564dd7c..d39da6fa08 100755 --- a/overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/module-setup.sh +++ b/overlay.d/05core/usr/lib/dracut/modules.d/35coreos-ignition/module-setup.sh @@ -26,6 +26,13 @@ install() { sgdisk \ uname + # For IBM SecureExecution + if [[ $(uname -m) = s390x ]]; then + inst_multiple \ + gpg \ + gpg-agent + fi + inst_simple "$moddir/coreos-diskful-generator" \ "$systemdutildir/system-generators/coreos-diskful-generator" @@ -76,4 +83,8 @@ install() { # IBM Secure Execution. Ignition config for reencryption of / and /boot inst_simple "$moddir/01-secex.ign" /usr/lib/coreos/01-secex.ign + install_ignition_unit "coreos-secex-ignition-decrypt.service" + inst_script "$moddir/coreos-secex-ignition-decrypt.sh" \ + "/usr/sbin/coreos-secex-ignition-decrypt" + } diff --git a/overlay.d/05core/usr/lib/dracut/modules.d/99emergency-shell-setup/emergency-shell.sh b/overlay.d/05core/usr/lib/dracut/modules.d/99emergency-shell-setup/emergency-shell.sh index c1107ed588..f42d92545d 100644 --- a/overlay.d/05core/usr/lib/dracut/modules.d/99emergency-shell-setup/emergency-shell.sh +++ b/overlay.d/05core/usr/lib/dracut/modules.d/99emergency-shell-setup/emergency-shell.sh @@ -70,9 +70,9 @@ EOF fi } -# in SE case drop config before entering shell +# in SE case drop everything before entering shell if [ -f /run/coreos/secure-execution ]; then - rm -f /run/ignition.json + rm -f /run/ignition.json /etc/ignition.asc fi # Print warnings/informational messages to all configured consoles on the