| <?xml version='1.0'?> <!--*-nxml-*--> |
| <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
| "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> |
| <!-- SPDX-License-Identifier: LGPL-2.1-or-later --> |
| |
| <refentry id="loader.conf" conditional='HAVE_GNU_EFI' |
| xmlns:xi="http://www.w3.org/2001/XInclude"> |
| <refentryinfo> |
| <title>loader.conf</title> |
| <productname>systemd</productname> |
| </refentryinfo> |
| |
| <refmeta> |
| <refentrytitle>loader.conf</refentrytitle> |
| <manvolnum>5</manvolnum> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>loader.conf</refname> |
| <refpurpose>Configuration file for systemd-boot</refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <para><filename><replaceable>ESP</replaceable>/loader/loader.conf</filename>, |
| <filename><replaceable>ESP</replaceable>/loader/entries/*.conf</filename> |
| <filename><replaceable>XBOOTLDR</replaceable>/loader/entries/*.conf</filename> |
| </para> |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para> |
| <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> will |
| read <filename><replaceable>ESP</replaceable>/loader/loader.conf</filename>, and any files with the |
| <literal>.conf</literal> extension under |
| <filename><replaceable>ESP</replaceable>/loader/entries/</filename> on the EFI system partition (ESP), |
| and <filename><replaceable>XBOOTLDR</replaceable>/loader/entries/</filename> on the extended boot loader |
| partition (XBOOTLDR) as defined by <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader |
| Specification</ulink>. |
| </para> |
| |
| <para>Each of these configuration files must consist of series of newline (i.e. ASCII code 10) separated |
| lines, each consisting of an option name, followed by whitespace, and the option |
| value. <literal>#</literal> may be used to start a comment line. Empty and comment lines are ignored. The |
| files use UTF-8 encoding.</para> |
| |
| <para>Boolean arguments may be written as |
| <literal>yes</literal>/<literal>y</literal>/<literal>true</literal>/<literal>t</literal>/<literal>on</literal>/<literal>1</literal> or |
| <literal>no</literal>/<literal>n</literal>/<literal>false</literal>/<literal>f</literal>/<literal>off</literal>/<literal>0</literal>. |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Options</title> |
| |
| <para>The configuration options supported by |
| <filename><replaceable>ESP</replaceable>/loader/entries/*.conf</filename> and |
| <filename><replaceable>XBOOTLDR</replaceable>/loader/entries/*.conf</filename> files are defined as part |
| of the <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader |
| Specification</ulink>.</para> |
| |
| <para>The following configuration are supported by the <filename>loader.conf</filename> configuration |
| file:</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term>default</term> |
| |
| <listitem><para>A glob pattern to select the default entry. The default entry |
| may be changed in the boot menu itself, in which case the name of the |
| selected entry will be stored as an EFI variable, overriding this option. |
| </para> |
| |
| <para>If set to <literal>@saved</literal> the chosen entry will be saved as an EFI variable |
| on every boot and automatically selected the next time the boot loader starts.</para> |
| |
| <table> |
| <title>Automatically detected entries will use the following names:</title> |
| |
| <tgroup cols='2'> |
| <colspec colname='name' /> |
| <colspec colname='expl' /> |
| <thead> |
| <row> |
| <entry>Name</entry> |
| <entry>Description</entry> |
| </row> |
| </thead> |
| <tbody> |
| <row> |
| <entry>auto-efi-default</entry> |
| <entry>EFI Default Loader</entry> |
| </row> |
| <row> |
| <entry>auto-efi-shell</entry> |
| <entry>EFI Shell</entry> |
| </row> |
| <row> |
| <entry>auto-osx</entry> |
| <entry>macOS</entry> |
| </row> |
| <row> |
| <entry>auto-reboot-to-firmware-setup</entry> |
| <entry>Reboot Into Firmware Interface</entry> |
| </row> |
| <row> |
| <entry>auto-windows</entry> |
| <entry>Windows Boot Manager</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| <para>Supported glob wildcard patterns are <literal>?</literal>, <literal>*</literal>, and |
| <literal>[…]</literal> (including ranges). Note that these patterns use the same syntax as |
| <citerefentry project='man-pages'><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry>, |
| but do not support all features. In particular, set negation and named character classes are not |
| supported. The matching is done case-insensitively on the entry ID (as shown by <command>bootctl |
| list</command>).</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>timeout</term> |
| |
| <listitem><para>How long the boot menu should be shown before the default |
| entry is booted, in seconds. This may be changed in the boot menu itself and |
| will be stored as an EFI variable in that case, overriding this option. |
| </para> |
| |
| <para>If set to <literal>menu-hidden</literal> or <literal>0</literal> (the default) no menu |
| is shown and the default entry will be booted immediately. The menu can be shown |
| by pressing and holding a key before systemd-boot is launched. Setting this to |
| <literal>menu-force</literal> disables the timeout while always showing the menu.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>console-mode</term> |
| |
| <listitem><para>This option configures the resolution of the console. Takes a |
| number or one of the special values listed below. The following values may be |
| used:</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term>0</term> |
| <listitem> |
| <para>Standard UEFI 80x25 mode</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>1</term> |
| <listitem> |
| <para>80x50 mode, not supported by all devices</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>2</term> |
| <listitem> |
| <para>the first non-standard mode provided by the device |
| firmware, if any</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>auto</term> |
| <listitem> |
| <para>Pick a suitable mode automatically using heuristics</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>max</term> |
| <listitem> |
| <para>Pick the highest-numbered available mode</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>keep</term> |
| <listitem> |
| <para>Keep the mode selected by firmware (the default)</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>editor</term> |
| |
| <listitem><para>Takes a boolean argument. Enable (the default) or disable the |
| editor. The editor should be disabled if the machine can be accessed by |
| unauthorized persons.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>auto-entries</term> |
| |
| <listitem><para>Takes a boolean argument. Enable (the default) or disable |
| entries for other boot entries found on the boot partition. In particular, |
| this may be useful when loader entries are created to show replacement |
| descriptions for those entries.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>auto-firmware</term> |
| |
| <listitem><para>A boolean controlling the presence of the "Reboot into firmware" entry |
| (enabled by default). If this is disabled, the firmware interface may still be reached |
| by using the <keycap>f</keycap> key.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>beep</term> |
| |
| <listitem><para>Takes a boolean argument. If timeout enabled beep every second, otherwise beep n times when n-th entry in boot menu is selected (default disabled). |
| Currently, only x86 is supported, where it uses the PC speaker.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>secure-boot-enroll</term> |
| |
| <listitem><para>Danger: this feature might soft-brick your device if used improperly.</para> |
| |
| <para>Controls enrollment of secure boot keys found on the ESP if the system is in setup mode: |
| <variablelist> |
| <varlistentry> |
| <term><option>off</option></term> |
| <listitem><para>No action is taken.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>manual</option></term> |
| <listitem><para>Boot entries for found secure boot keys are created that allow manual |
| enrollment.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>if-safe</option></term> |
| <listitem><para>Same behavior as <option>manual</option>, but will try to automatically |
| enroll the key <literal>auto</literal> if it is considered to be safe. Currently, this is only |
| the case if the system is running inside a virtual machine.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>force</option></term> |
| <listitem><para>Always enroll the <literal>auto</literal> key if found. Note that a warning |
| message with a timeout will still be shown if this operation is unknown to be safe.</para></listitem> |
| </varlistentry> |
| </variablelist> |
| </para> |
| |
| <para>The different sets of variables can be set up under |
| <filename>/loader/keys/<replaceable>NAME</replaceable></filename> where |
| <replaceable>NAME</replaceable> is the name that is going to be used as the name of the entry. This |
| allows one to ship multiple sets of Secure Boot variables and choose which one to enroll at runtime. |
| </para> |
| |
| <para>Supported Secure Boot variables are one database for authorized images, one key exchange key |
| (KEK) and one platform key (PK). For more information, refer to the <ulink |
| url="https://uefi.org/specifications">UEFI specification</ulink>, under Secure Boot and Driver |
| Signing. Another resource that describe the interplay of the different variables is the |
| <ulink url="https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/secure_boot_chain_in_uefi/uefi_secure_boot"> |
| EDK2 documentation</ulink>.</para> |
| |
| <para>A complete set of UEFI variable includes <filename>db.auth</filename>, <filename>KEK.auth</filename> |
| and <filename>PK.auth</filename>. Note that these files need to be authenticated UEFI variables. See |
| below for an example of how to generate them from regular X.509 keys.</para> |
| |
| <programlisting>uuid=$(systemd-id128 new --uuid) |
| for key in PK KEK db; do |
| openssl req -new -x509 -subj "/CN=${key}/" -keyout "${key}.key" -out "${key}.crt" |
| openssl x509 -outform DER -in "${key}.crt" -out "${key}.der" |
| sbsiglist --owner "${uuid}" --type x509 --output "${key}.esl" "${key}.der" |
| done |
| |
| for key in MicWinProPCA2011_2011-10-19.crt MicCorUEFCA2011_2011-06-27.crt MicCorKEKCA2011_2011-06-24.crt; do |
| curl "https://www.microsoft.com/pkiops/certs/${key}" --output "${key}" |
| sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output "${key%crt}esl" "${key}" |
| done |
| |
| # Optionally add Microsoft Windows Production CA 2011 (needed to boot into Windows). |
| cat MicWinProPCA2011_2011-10-19.esl >>db.esl |
| |
| # Optionally add Microsoft Corporation UEFI CA 2011 for firmware drivers / option ROMs |
| # and third-party boot loaders (including shim). This is highly recommended on real |
| # hardware as not including this may soft-brick your device (see next paragraph). |
| cat MicCorUEFCA2011_2011-06-27.esl >>db.esl |
| |
| # Optionally add Microsoft Corporation KEK CA 2011. Recommended if either of the |
| # Microsoft keys is used as the official UEFI revocation database is signed with this |
| # key. The revocation database can be updated with <citerefentry project='man-pages'><refentrytitle>fwupdmgr</refentrytitle><manvolnum>1</manvolnum></citerefentry>. |
| cat MicCorKEKCA2011_2011-06-24.esl >>KEK.esl |
| |
| attr=NON_VOLATILE,RUNTIME_ACCESS,BOOTSERVICE_ACCESS,TIME_BASED_AUTHENTICATED_WRITE_ACCESS |
| sbvarsign --attr ${attr} --key PK.key --cert PK.crt --output PK.auth PK PK.esl |
| sbvarsign --attr ${attr} --key PK.key --cert PK.crt --output KEK.auth KEK KEK.esl |
| sbvarsign --attr ${attr} --key KEK.key --cert KEK.crt --output db.auth db db.esl |
| </programlisting> |
| |
| <para>This feature is considered dangerous because even if all the required files are signed with the |
| keys being loaded, some files necessary for the system to function properly still won't be. This |
| is especially the case with Option ROMs (e.g. for storage controllers or graphics cards). See |
| <ulink url="https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom">Secure Boot and Option ROMs</ulink> |
| for more details.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>reboot-for-bitlocker</term> |
| |
| <listitem><para>Caveat: This feature is experimental, and is likely to be changed (or removed in its |
| current form) in a future version of systemd.</para> |
| |
| <para>Work around BitLocker requiring a recovery key when the boot loader was |
| updated (disabled by default).</para> |
| |
| <para>Try to detect BitLocker encrypted drives along with an active TPM. If both are found and |
| Windows Boot Manager is selected in the boot menu, set the <literal>BootNext</literal> EFI variable |
| and restart the system. The firmware will then start Windows Boot Manager directly, leaving the TPM |
| PCRs in expected states so that Windows can unseal the encryption key. This allows |
| <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> to |
| be updated without having to provide the recovery key for BitLocker drive unlocking.</para> |
| |
| <para>Note that the PCRs that Windows uses can be configured with the |
| <literal>Configure TPM platform validation profile for native UEFI firmware configurations</literal> |
| group policy under <literal>Computer Configuration\Administrative Templates\Windows Components\BitLocker Drive Encryption</literal>. |
| When Secure Boot is enabled, changing this to PCRs <literal>0,2,7,11</literal> should be safe. |
| The TPM key protector needs to be removed and then added back for the PCRs on an already |
| encrypted drive to change. If PCR 4 is not measured, this setting can be disabled to speed |
| up booting into Windows.</para></listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Example</title> |
| |
| <programlisting># /boot/efi/loader/loader.conf |
| timeout 0 |
| default 01234567890abcdef1234567890abdf0-* |
| editor no |
| </programlisting> |
| |
| <para>The menu will not be shown by default (the menu can still be shown by |
| pressing and holding a key during boot). One of the entries with files with a |
| name starting with <literal>01234567890abcdef1234567890abdf0-</literal> will be |
| selected by default. If more than one entry matches, the one with the highest |
| priority will be selected (generally the one with the highest version number). |
| The editor will be disabled, so it is not possible to alter the kernel command |
| line.</para> |
| </refsect1> |
| |
| <refsect1> |
| <title>See Also</title> |
| <para> |
| <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>, |
| <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> |
| </para> |
| </refsect1> |
| </refentry> |