<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Luks on Le Site de François</title><link>https://lesitedefrancois.be/en/tags/luks/</link><description>Recent content in Luks 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/luks/index.xml" rel="self" type="application/rss+xml"/><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>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>Storage Encryption</title><link>https://lesitedefrancois.be/en/security/storage-encryption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/storage-encryption/</guid><description>&lt;p&gt;Storage encryption is not a single feature but a &lt;strong&gt;four-layer decision&lt;/strong&gt; that must be made independently, because each layer addresses a different adversary and a different failure mode. &lt;strong&gt;Layer 1 — disk/OSD at-rest encryption&lt;/strong&gt; protects against physical media theft: a decommissioned OSD or stolen drive is unreadable without the key. &lt;strong&gt;Layer 2 — cluster-internal wire encryption&lt;/strong&gt; protects against a network-layer attacker who can observe traffic between storage nodes: OSDs, monitors, and clients on the cluster network. &lt;strong&gt;Layer 3 — PV/volume-level encryption&lt;/strong&gt; protects against a storage operator or another tenant reading a workload&amp;rsquo;s data through the storage system itself — the threat model where the storage cluster is itself potentially untrusted or multi-tenant. &lt;strong&gt;Layer 4 — object storage server-side encryption&lt;/strong&gt; provides per-object key management for S3-compatible workloads, enabling customer-managed keys (CMK) and per-tenant key isolation in object stores. These layers are &lt;strong&gt;independent and composable&lt;/strong&gt;: enabling Layer 1 without Layer 2 protects against physical theft but not a network interceptor; enabling Layer 3 without Layer 1 protects against the storage operator but not physical media extraction. A complete encryption posture addresses all four explicitly, even if some layers are deliberately left disabled with a documented rationale.&lt;/p&gt;</description></item></channel></rss>