In diesem Beitrag lesen Sie ein wenig über meine seltsamen Forschungen während des erzwungenen Krankenstands. Es geht um mehrere Dinge gleichzeitig, die nicht „Best Practice“ sind, sondern auch möglich! Hier ist ein Tutorial, wie man Archlinux (mein Lieblingsdistrikt) installiert, damit:
- ohne separates / boot (nur in / root)
- / auf lvm
- lvm in luks behälter
- mit UEFI
- in einer virtuellen Maschine.
mit sicherem Start ("schwierig" in der virtuellen Maschine ist unwahrscheinlich, erfolgreich zu sein)
Es ist bemerkenswert, dass bis auf die EFI-Systempartition alles mit einer einzigen grubx64.efi-Datei verschlüsselt wird - einer EFI-Anwendung zum Ausführen von grub.
Wenn Sie interessiert sind, willkommen bei cat!
Zuerst habe ich alles auf meinem Lenovo X240-Laptop eingerichtet, dann habe ich zum Schreiben eines Artikels eine virtuelle Maschine mit OVMF in Proxmox verwendet.
Testbed-Setup:
Alles wird ganz normal erstellt. Das Bild verwendet meinen Lieblingsbogen, der immer von
Yandex heruntergeladen werden kann.
Als nächstes einige Punkte zum virtuellen in Proxmox bezüglich UEFI. Um den Betrieb des Standes mit UEFI zu testen (sonst ist es nicht so interessant), müssen Sie in den Eigenschaften der virtuellen Maschine OVMF anstelle von SeaBIOS festlegen:

Fügen Sie als Nächstes die UEFI-Festplatte entsprechend hinzu, um Folgendes zu erhalten:

Jetzt können wir die virtuelle Maschine starten und den Installationsprozess starten. Starten Sie in der Konsole der virtuellen Maschine sofort den sshd-Dienst, legen Sie das Root-Passwort fest und ermitteln Sie die DHCP-Adresse der virtuellen Maschine:

Als nächstes können wir weiter an ssh arbeiten, um es bequemer zu machen.
Festplattenlayout
Nachdem wir bereits eine Verbindung über ssh hergestellt haben, stellen wir zunächst die Zeit so ein, dass sich später nicht herausstellt, dass die Dateisysteme in Zukunft erstellt werden:
timedatectl set-ntp true && timedatectl set-timezone Europe/Moscow
Überprüfen Sie, ob alles korrekt ist:
root@archiso ~
Jetzt können wir mit der Partitionierung der Festplatte beginnen. Zu diesem Zeitpunkt habe ich ein / dev / vda-Laufwerk als Virtio-Controller und dies ist nur eine leere Festplatte ohne Partitionstabelle:
root@archiso ~
Wir werden es in 2 Partitionen aufteilen:
- fat32-Festplatte für UEFI-Anwendungen (EFI_system_partition)
- LUKS Container mit allem anderen
Verwenden Sie gdisk, um die GPT zu erstellen:
root@archiso ~
Erstellen Sie als Nächstes die erste Partition für EFI vom Typ EF00 (EFI System Partition):
Command (? for help): n Partition number (1-128, default 1): First sector (34-31457246, default = 2048) or {+-}size{KMGTP}: Last sector (2048-31457246, default = 31457246) or {+-}size{KMGTP}: +512M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): <b>EF00</b> Changed type of partition to 'EFI System'
Erstellen Sie jetzt eine Partition für LUKS, in der wir uns nicht einmal mit dem Typ beschäftigen, und lassen Sie ihn unverändert:
Command (? for help): n Partition number (2-128, default 2): First sector (34-31457246, default = 1050624) or {+-}size{KMGTP}: Last sector (1050624-31457246, default = 31457246) or {+-}size{KMGTP}: <b>Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem'</b>
Wir werden die Änderungen aufschreiben und mit dem Partitions-Markup abschließen:
Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/vda. The operation has completed successfully.
Erstellen eines LUKS-Containers und von Dateisystemen
Mit dem ersten Abschnitt (vda1) ist alles ganz einfach. Wir müssen es nur formatieren und jetzt ist es soweit:
root@archiso ~
Die zweite Partition ist der Container, den Sie zuerst vorbereiten müssen. Wir formatieren die Partition durch cryptsetup und setzen die Passphrase:
root@archiso ~
*** Ich habe mich nicht um die Auswahl der Chiffren gekümmert, sondern die Randomisierung mit urandom und anderen überschrieben, sondern nur einen Standardcontainer erstellt.
Öffnen Sie als Nächstes den Container, indem Sie dieselbe Passphrase angeben:
root@archiso ~
Jetzt haben wir einen offenen Container, auf den über den Geräte-Mapper zugegriffen werden kann:
root@archiso ~
Jetzt können wir mit lvm fortfahren (ich werde schnell schreiben, da dies kein Thema ist):
root@archiso ~
Als nächstes erstellen Sie die Dateisysteme auf unserer Ebene:
root@archiso ~
Jetzt kann alles montiert werden, um das Basissystem zu installieren. Der Installationspunkt ist / mnt, wo die Wurzel unseres zukünftigen Systems beginnt:
[root@archiso ~]
*** / boot / efi Ich erstelle, damit / boot selbst auf / dev / mapper / rootvg-root bleibt und der efi-Ordner bereits auf / dev / vda1 (fat32 efi-Partition) gemountet ist: [root@archiso ~]
Überprüfen Sie die aktuellen Einhängepunkte (immer nützlich):
[root@archiso ~]
Wie wir sehen, ist alles ehrlich und jetzt ist es Zeit, den Bogen selbst zu setzen.
Installation des Basissystems
Installieren Sie die Basispakete aus den Basis- und Basisentwicklungssätzen mit dem Pacstrap-Paket (Sie können ihnen alles hinzufügen, was Sie wollen, und außerdem):
pacstrap /mnt base base-devel
Alles perfekt gebootet, das Basissystem ist fertig. Natürlich habe ich die Schlussfolgerung entfernt. Jetzt können wir genau dieses System so konfigurieren, dass es bootet und funktioniert.
Aus den grundlegenden Dingen generieren wir sofort fstab:
genfstab -pU /mnt >> /mnt/etc/fstab
Machen Sie als nächstes Arch-Chroot zu diesem neuen System:
[root@archiso ~]
*** arch-chroot ist ein sehr nützliches Dienstprogramm, da es alles selbst erledigt. Obwohl Sie immer die Standard-Chroot verwenden können, befolgen Sie vorher die Anweisungen im Gentoo-Handbuch wiki.gentoo.org/wiki/Handbook : AMD64 / Installation / Base-Abschnitt „Mounten der erforderlichen Dateisysteme“.Konfigurieren Sie sofort die Systemzeit und den Hostnamen:
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime && \ hwclock --systohc && \ echo luks-test > /etc/hostname
Legen Sie das Root-Passwort fest:
[root@archiso /]
Kommentieren Sie die erforderlichen Gebietsschemas in /etc/locale.gen aus:
[root@archiso /]
Wir werden sie generieren:
[root@archiso /]
Konfigurieren Sie sie sofort für das System und die Konsole:
[root@archiso /]
Konfigurieren Sie nun die Datei /etc/mkinitcpio.conf, die beim Generieren von initramfs für Optionen, Hooks usw. verantwortlich ist:
vi /etc/mkinitcpio.conf
Das Wichtigste sind die Haken und ihre Reihenfolge:
HOOKS=(base udev autodetect modconf block keymap encrypt lvm2 resume filesystems keyboard fsck)
*** Setzen Sie den Hook fort, um das System nach dem Ruhezustand vom Swap zu starten. Auf einer virtuellen Maschine wird es nicht benötigt. Ich habe es aus Buche kopiert.Jetzt können wir initramfs generieren:
[root@archiso /]
Nachdem wir das System haben, müssen wir den Bootloader selbst installieren. Meine Wahl fiel auf grub (2), weil es irgendwie vertrauter ist und den Kernel leicht von einer verschlüsselten Partition laden kann (na ja, oder ich habe nicht wirklich nach anderen gesucht).
Installieren Sie das Madenpaket:
[root@archiso /]
Bearbeiten Sie vor dem Generieren der Konfiguration die Standard-Grub-Optionen:
vim /etc/default/grub
Hier müssen Sie eine wichtige Zeile auskommentieren (natürlich kein Kommentar):
und zu GRUB_CMDLINE_LINUX hinzufügen (standardmäßig leer):
GRUB_CMDLINE_LINUX="cryptdevice=UUID=5ad7c9ad-fb17-4839-925e-479432516c07:container"
UUID habe ich von blkid genommen:
[root@archiso /]
Wir generieren eine Konfiguration für grub:
[root@archiso /]
Installieren Sie als Nächstes grub selbst auf der Festplatte:
[root@archiso /]
*** Sie können --recheck --debug hinzufügen, die Architektur angeben ... aber ... es funktioniert wirklich von selbst)Jetzt bearbeiten wir / etc / crypttab, damit das System selbst weiß, dass beim Laden der Abschnitt LUKS entschlüsselt werden muss. Fügen Sie die Zeile hinzu:
echo "container /dev/vda2 none" >> /etc/crypttab
Dies bedeutet, dass Sie ein Kennwort (keines) für die Partition / dev / vda2 anfordern und es bereits über den Geräte-Mapper als Container präsentieren müssen.
Jetzt können wir chroot beenden und das System neu starten:
[root@archiso /]
Wenden wir uns nun der Konsole der virtuellen Maschine zu, um das Ergebnis zu sehen:

Zu diesem Zeitpunkt haben wir die EFI-Anwendung /boot/efi/EFI/arch/grubx64.efi mit / dev / vda1 gestartet, die uns nach einem Kennwort zum Entschlüsseln unseres Containers fragt.
Als nächstes nach Eingabe des Passworts:

Hier ist das bekannte Grub-Fenster mit unseren Boot-Optionen von /boot/grub/grub.cfg.
Zu diesem Zeitpunkt entschlüsselte grub unseren Container und erhielt Zugriff auf diese Datei selbst (/boot/grub/grub.cfg), den Kernel und initramfs. Nach Auswahl der Option startet der Kernel standardmäßig initramfs:

Aktiv hat der Kernel den Verschlüsselungs-Hook entwickelt, der uns erneut nach dem Passwort zum Entschlüsseln des Containers fragt (im Allgemeinen müssen Sie das Passwort zweimal eingeben, aber es kann sein, dass Sie aus übermäßiger Paranoia 2 Container für Boot und Root erstellen :)
Und dann, nachdem das System vollständig geladen ist:
PS: Um das Ausmaß der Schizophrenie zu erhöhen, reicht nur der sichere Start nicht aus, um unseren Bootloader grubx64.efi zu signieren.
Ich fand es uninteressant, nur den Kernel und initramfs auf / dev / vda1 zu setzen, wie ich es bereits 100 Mal getan habe. Andere Bootloader wie SHIM, bootctl usw. wissen nicht, wie das geht (wenn ich es nicht weiß, teilen Sie es uns in den Kommentaren mit).
Nützliche Materialien zum Thema und verwendete Materialien