<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Boot on Le Site de François</title><link>https://lesitedefrancois.be/en/tags/boot/</link><description>Recent content in Boot on Le Site de François</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 François</copyright><atom:link href="https://lesitedefrancois.be/en/tags/boot/index.xml" rel="self" type="application/rss+xml"/><item><title>bootc (Bootable Containers)</title><link>https://lesitedefrancois.be/en/security/bootc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/bootc/</guid><description>&lt;p&gt;&lt;strong&gt;bootc&lt;/strong&gt; is a CNCF sandbox project, created by Colin Walters, that applies the OCI container model to operating system delivery. Where conventional container images package an application to run inside a host OS, a bootc image packages the entire OS — kernel (under &lt;code&gt;/usr/lib/modules&lt;/code&gt;), initrd, systemd units, firmware, and all userspace — as a standard &lt;strong&gt;OCI&lt;/strong&gt; image that can be built with &lt;code&gt;podman build&lt;/code&gt; or &lt;code&gt;buildah&lt;/code&gt;, stored in any OCI-conformant registry, signed with standard supply chain tools, and pulled to a machine where it becomes the running system. At runtime the base OS is not running inside a container; systemd is pid 1 as usual. The container image format is purely a transport and build model, not an execution model.&lt;/p&gt;</description></item><item><title>dm-verity</title><link>https://lesitedefrancois.be/en/security/dm-verity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/dm-verity/</guid><description>&lt;p&gt;&lt;strong&gt;dm-verity&lt;/strong&gt; is a Linux device mapper target, available since kernel 3.4, that provides &lt;strong&gt;transparent read-only integrity verification&lt;/strong&gt; for block devices. When a block device is mapped through dm-verity, every data block read from the underlying device is verified against a pre-computed &lt;strong&gt;Merkle tree&lt;/strong&gt; of cryptographic hashes before being returned to the caller — any modification to any block, whether from corruption, bit rot, or deliberate tampering, produces a hash mismatch that dm-verity detects and handles according to its configured error mode. The verification is transparent to the filesystem and applications mounted above it: they read from the dm-verity device as if it were a normal block device, with no awareness that every read is being hash-checked. The security guarantee is that the integrity of the entire block device is committed to by a single &lt;strong&gt;root hash&lt;/strong&gt; — a 32-byte SHA-256 value that covers the entire Merkle tree and therefore the entire data volume. If the root hash is known to be correct (because it was measured into a &lt;strong&gt;TPM&lt;/strong&gt; PCR, embedded in a &lt;strong&gt;UKI&lt;/strong&gt;, or signed by a &lt;strong&gt;Secure Boot&lt;/strong&gt; key), then any verified read from the dm-verity device is guaranteed to return exactly the data that was present when the Merkle tree was computed.&lt;/p&gt;</description></item><item><title>GRUB (GNU GRand Unified Bootloader)</title><link>https://lesitedefrancois.be/en/security/grub/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/grub/</guid><description>&lt;p&gt;&lt;strong&gt;GRUB (GNU GRand Unified Bootloader)&lt;/strong&gt; is the bootloader used by the majority of Linux distributions on x86 and x86-64 systems. Its role is to bridge the gap between what firmware hands control to and what the Linux kernel needs: firmware (BIOS or UEFI) loads GRUB, and GRUB locates the kernel image and initrd on disk, assembles a kernel command line, and transfers control to the kernel. Because GRUB understands a wide range of filesystem formats — ext4, XFS, Btrfs, FAT, and more — it can read its own configuration and the kernel directly from the root or boot partition without any intermediate step, which is what distinguishes it from simpler bootloaders that can only read from FAT.&lt;/p&gt;</description></item><item><title>initramfs (initial RAM filesystem)</title><link>https://lesitedefrancois.be/en/security/initramfs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/initramfs/</guid><description>&lt;p&gt;&lt;strong&gt;initramfs (initial RAM filesystem)&lt;/strong&gt; is the temporary root filesystem the Linux kernel mounts immediately after loading itself and before switching to the machine’s real root. The bootloader — &lt;strong&gt;GRUB&lt;/strong&gt;, &lt;strong&gt;systemd-boot&lt;/strong&gt;, or firmware loading a &lt;strong&gt;UKI&lt;/strong&gt; — passes a compressed &lt;strong&gt;cpio&lt;/strong&gt; image (historically called an &lt;em&gt;initrd&lt;/em&gt;, though modern Linux always unpacks it as an initramfs into &lt;strong&gt;tmpfs&lt;/strong&gt;, not a separate ramdisk block device). The kernel extracts this archive into an in-memory tree, executes &lt;code&gt;/init&lt;/code&gt; as pid 1, and that early userspace environment is responsible for everything the bare kernel cannot yet do: loading storage and filesystem kernel modules, bringing up networking, discovering and unlocking &lt;strong&gt;LUKS&lt;/strong&gt; volumes, activating &lt;strong&gt;LVM&lt;/strong&gt; or multipath devices, mounting the true root partition, and finally calling &lt;code&gt;switch_root&lt;/code&gt; (or &lt;code&gt;pivot_root&lt;/code&gt;) to hand control to the installed system’s init — typically &lt;strong&gt;systemd&lt;/strong&gt; on current distributions. If the initramfs fails, the boot stops before userspace on the real root ever starts; if it succeeds, it is discarded and its memory reclaimed once the pivot completes.&lt;/p&gt;</description></item><item><title>LUKS (Linux Unified Key Setup)</title><link>https://lesitedefrancois.be/en/security/luks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/luks/</guid><description>&lt;p&gt;&lt;strong&gt;LUKS (Linux Unified Key Setup)&lt;/strong&gt; is the standard specification for block device encryption on Linux, created by Clemens Fruhwirth in 2004. It sits above the kernel&amp;rsquo;s &lt;strong&gt;dm-crypt&lt;/strong&gt; subsystem — which performs the actual AES sector-by-sector encryption via the device mapper — and adds a structured, on-disk header that decouples key management from the encryption itself. Any block device can be a LUKS container: a partition, a logical volume, a loop device; anything that sits beneath it (filesystem, swap, LVM) is encrypted transparently, with no changes required to the software using it. The managed &lt;code&gt;cryptsetup&lt;/code&gt; tool and the &lt;code&gt;libcryptsetup&lt;/code&gt; library provide userspace access to LUKS volumes, and are the canonical interface for all operations on them.&lt;/p&gt;</description></item><item><title>Measured Boot</title><link>https://lesitedefrancois.be/en/security/measured-boot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/measured-boot/</guid><description>&lt;p&gt;&lt;strong&gt;Measured Boot&lt;/strong&gt; is a boot process architecture in which each component in the boot chain — firmware, bootloader, kernel, initrd, kernel command line — is cryptographically hashed and that hash is recorded into a &lt;strong&gt;TPM&lt;/strong&gt; Platform Configuration Register (PCR) before the component executes. The critical distinction from &lt;strong&gt;Secure Boot&lt;/strong&gt; is in what each mechanism provides: Secure Boot is an &lt;em&gt;enforcement&lt;/em&gt; mechanism that prevents unauthorised components from running at all; Measured Boot is a &lt;em&gt;recording&lt;/em&gt; mechanism that creates a tamper-evident log of exactly what did run, without necessarily preventing anything. The two are complementary and typically deployed together — Secure Boot enforces a policy at boot time, Measured Boot produces the evidence that the policy was enforced as claimed. A system can have Measured Boot without Secure Boot (it records everything that ran, even unsigned components), but Secure Boot without Measured Boot provides enforcement with no attestable evidence of what was enforced.&lt;/p&gt;</description></item><item><title>NBDE / Clevis / Tang (Network-Bound Disk Encryption)</title><link>https://lesitedefrancois.be/en/security/nbde-clevis-tang/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/nbde-clevis-tang/</guid><description>&lt;p&gt;&lt;strong&gt;NBDE (Network-Bound Disk Encryption)&lt;/strong&gt; is an approach to automatic &lt;strong&gt;LUKS&lt;/strong&gt; disk unlocking that binds the volume key not to hardware state (a &lt;strong&gt;TPM&lt;/strong&gt; PCR measurement) but to network presence: a &lt;strong&gt;LUKS&lt;/strong&gt;-encrypted volume unlocks automatically at boot if and only if the machine can reach a designated &lt;strong&gt;Tang&lt;/strong&gt; server on a trusted network. Remove the machine from that network — because it was stolen, because a data centre drive was pulled, because someone exfiltrated the hardware — and the volume key becomes unrecoverable without a fallback passphrase. The threat model is therefore complementary to TPM-based unlocking: TPM sealing asks &amp;ldquo;is this the right software stack?&amp;rdquo; and locks the key to a specific platform measurement; NBDE asks &amp;ldquo;is this machine on the trusted network?&amp;rdquo; and locks the key to network presence. Neither addresses both threat classes alone, which is why the two are routinely combined — and why RHEL formalises NBDE as a subcategory of the broader &lt;strong&gt;Policy-Based Decryption (PBD)&lt;/strong&gt; framework that the Clevis pin system implements.&lt;/p&gt;</description></item><item><title>RHCOS (Red Hat Enterprise Linux CoreOS)</title><link>https://lesitedefrancois.be/en/security/rhcos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/rhcos/</guid><description>&lt;p&gt;&lt;strong&gt;RHCOS (Red Hat Enterprise Linux CoreOS)&lt;/strong&gt; is the operating system that runs on every OpenShift control plane and worker node. It is not a general-purpose Linux distribution — it is a purpose-built, immutable, container-optimised OS designed to run exclusively as a managed node in an OpenShift cluster. Its security posture is architecturally different from a hardened RHEL installation: rather than hardening a mutable system through configuration management, RHCOS makes the OS layer structurally resistant to modification by design. The root filesystem&amp;rsquo;s &lt;code&gt;/usr&lt;/code&gt; tree is &lt;strong&gt;read-only&lt;/strong&gt; (enforced at mount time by rpm-ostree and, in recent versions, by &lt;strong&gt;composefs&lt;/strong&gt; over the OSTree object store), &lt;code&gt;/etc&lt;/code&gt; and &lt;code&gt;/var&lt;/code&gt; are writable but managed exclusively by the &lt;strong&gt;Machine Config Operator (MCO)&lt;/strong&gt;, and no package manager is available at runtime for ad-hoc software installation. An operator who wants to change any node-level configuration — kernel arguments, sysctl settings, systemd units, certificates, kubelet configuration — creates a &lt;strong&gt;MachineConfig&lt;/strong&gt; object in the OpenShift API; the MCO renders it into an Ignition config, applies it to the target MachineConfigPool (master, worker, or custom), and drains and reboots the affected nodes in a rolling fashion. Direct SSH access to nodes for configuration changes is explicitly unsupported and actively discouraged — &lt;code&gt;oc debug node/&amp;lt;name&amp;gt;&lt;/code&gt; is the supported emergency access path, dropping into a privileged container on the node&amp;rsquo;s host namespaces under audit.&lt;/p&gt;</description></item><item><title>Secure Boot (UEFI Secure Boot)</title><link>https://lesitedefrancois.be/en/security/secure-boot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/secure-boot/</guid><description>&lt;p&gt;&lt;strong&gt;UEFI Secure Boot&lt;/strong&gt; is a firmware-level mechanism that ensures each binary executed during the boot process — bootloader, kernel, UEFI drivers — is cryptographically signed by a key the firmware trusts, before it is allowed to run. It is defined in the UEFI specification and implemented by the firmware on virtually all modern x86 and ARM platforms. Its threat model is bootkits and rootkits that install themselves before the OS loads and therefore survive reboots, OS reinstalls, and cannot be detected by any software running after them.&lt;/p&gt;</description></item><item><title>TPM (Trusted Platform Module)</title><link>https://lesitedefrancois.be/en/security/tpm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/tpm/</guid><description>&lt;p&gt;A &lt;strong&gt;Trusted Platform Module (TPM)&lt;/strong&gt; is a tamper-resistant security chip — implemented in hardware (dTPM), firmware (fTPM), or software — that acts as a hardware-anchored root of trust for a system. It provides a secure enclave for generating and storing cryptographic keys, performing cryptographic operations, and recording integrity measurements of the boot process.&lt;/p&gt;</description></item><item><title>UKI (Unified Kernel Image)</title><link>https://lesitedefrancois.be/en/security/uki/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/uki/</guid><description>&lt;p&gt;A &lt;strong&gt;Unified Kernel Image (UKI)&lt;/strong&gt; is a single EFI executable that packages together the Linux kernel, the initramfs (initrd), the kernel command line, and optionally other resources like a splash screen or system credentials. Instead of relying on a bootloader to assemble these components at runtime, a UKI bundles them statically into one signed binary.&lt;/p&gt;</description></item></channel></rss>