Wie konfiguriere ich systemd, um eine verschlüsselte Auslagerungsdatei zu aktivieren?

7

Meine vorherige Frage ergab die Befehle zum Hinzufügen einer verschlüsselten Auslagerungsdatei:

# One-time setup:
fallocate -l 4G /root/swapfile.crypt
chmod 600 /root/swapfile.crypt

# On every boot:
loop=$(losetup -f)
losetup ${loop} /root/swapfile.crypt
cryptsetup open --type plain --key-file /dev/urandom ${loop} swapfile
mkswap /dev/mapper/swapfile
swapon /dev/mapper/swapfile

Aber Arch Linux verwendet systemd und ich habe Probleme herauszufinden, wie systemd meine Auslagerungsdatei am besten automatisch aktivieren kann. systemd.swap schlägt vor, dass ich eine dev-mapper-swapfile.swapEinheit haben sollte, die ungefähr so aussieht:

[Unit]
Description=Encrypted Swap File

[Swap]
What=/dev/mapper/swapfile

Das würde den swaponBefehl ausführen . Ich bin mir jedoch nicht sicher, wie ich die vorbereitenden Befehle ausführen soll /dev/mapper/swapfile. Ich nehme an, das dev-mapper-swapfile.swapsollte eine Abhängigkeit von einer anderen Einheit deklarieren, aber ich bin mir nicht sicher, wie diese Einheit aussehen soll.

cjm
quelle

Antworten:

5

Vielleicht möchten Sie einen Blick darauf werfen:

  • Crypttab (5)
  • systemd-cryptsetup @ .service (8)
  • systemd-cryptsetup-generator (8)

Diese funktionieren für verschlüsselte Volumes, die von Blockgeräten unterstützt werden. Sie sollten auch für dateibasierte Volumes funktionieren.

Aktualisieren:

Das funktioniert bei mir:

# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:[email protected](8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=umount.target
Before=cryptsetup.target
After=systemd-random-seed-load.service

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'swap2' '/swap.test'     '/dev/urandom' 'swap'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach 'swap2'
ExecStartPost=/sbin/mkswap '/dev/mapper/swap2'

Schritte zum Abrufen dieser Datei:

  • Erstellen Sie einen Eintrag in / etc / crypttab: swap2 /swap.test /dev/urandom swap
  • Führen Sie diesen Befehl aus: /usr/lib/systemd/system-generators/systemd-cryptsetup-generator Dadurch werden Einheitendateien im /tmp/Verzeichnis erstellt.
  • Suchen Sie nach der generierten Einheitendatei.
  • Öffnen Sie es und entfernen Sie den Eintrag swap.test.deviceaus den Anweisungen After=und BindsTo=. Dies ist wichtig, da per Definition kein Gerät für die Auslagerungsdatei vorhanden ist. Dies verhindert den Start der Unitfile.
  • Kopieren Sie die Unitfile nach /etc/systemd/system/
  • Aktivieren Sie es für Ihr Lieblingsziel.
t-8ch
quelle
Sie haben vielleicht Recht, aber ich verstehe nicht, wie ich diese auf ein dateibasiertes Volume anwenden soll. Insbesondere ist das /dev/loopNerzeugte von losetup -fnicht unbedingt zwischen Stiefeln konsistent.
cjm
Cryptsetup selbst sollte das Loopback-Gerät zuweisen. cryptsetup open /swap.test swap. Ich konnte es beim Booten nicht zum Laufen bringen (nur mit / etc / crypttab). Eine Einheit, die alles selbst mit ExecStartAnweisungen macht, sollte funktionieren. Vielleicht sollte dies systemd devs gemeldet werden.
t-8ch
Ich denke, das Problem könnte sein, dass es nicht ausgeführt wurde mkswap. Da ich einen zufälligen Schlüssel verwende, muss die Auslagerungsdatei bei jedem Start neu initialisiert werden. Aber ich bin mir nicht sicher, wie ich das einrichten soll.
cjm
3

Hier ist das Endergebnis, das ich basierend auf der Antwort von t-8ch gefunden habe .

Geben Sie dies ein /etc/systemd/system/[email protected]:

# Automatically generated by systemd-cryptsetup-generator
# then manually tweaked

[Unit]
Description=Cryptography Setup for %I
Documentation=man:[email protected](8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=umount.target
Before=cryptsetup.target
After=systemd-random-seed-load.service

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'swapfile' '/root/swapfile.crypt' '/dev/urandom' 'swap,cipher=aes-cbc-essiv:sha256,size=256'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach 'swapfile'
ExecStartPost=/sbin/mkswap '/dev/mapper/swapfile'

Geben Sie dies ein /etc/systemd/system/dev-mapper-swapfile.swap:

[Unit]
Description=Encrypted Swap File
[email protected]
[email protected]
Before=swap.target

[Swap]
What=/dev/mapper/swapfile

[Install]
WantedBy=swap.target

Einmaliges Setup (als Root), um die Swap-Datei zu erstellen, für zukünftige Starts zu aktivieren und sofort zu verwenden:

fallocate -l 4G /root/swapfile.crypt
chmod 600 /root/swapfile.crypt
systemctl enable dev-mapper-swapfile.swap
systemctl start dev-mapper-swapfile.swap

Die Größe im fallocateBefehl bestimmt, wie groß Ihre Auslagerungsdatei sein wird.

Die /etc/crypttabEingabe ist nicht erforderlich; Es ist nur ein Weg zu generieren [email protected]. Sobald das erledigt ist, brauchen Sie es nicht mehr.

cjm
quelle