Das Ziel dieses Szenarios ist es, einen Server mit unverschlüsseltem Rootfs starten zu lassen. Ein mit Luks verschlüsseltes Volume soll dann per Systemd gemountet werden, und anschließend sämtliche Systemd-Dienste, die nur mit den verschlüsselten Daten funktionieren, gestartet werden.
Der Startvorgang soll bis auf die Passworteingabe automatisiert werden.
Das System bootet in drei Schritten:
before-decrypt.targetdecrypt.targetstart-full-system.target
lsblk -f | grep crypto_LUKS
testluks UUID=4cf5deb5-d953-c8af-7ef0-52f48771a964 none luks,noauto
/dev/mapper/testluks /mnt/testluks ext4 defaults,rw,noauto 0 0
z.B.: # systemctl disable smbd nginx mysql …
# systemctl daemon-reload
# ls -1 /run/systemd/generator/*.mount
/run/systemd/generator/mnt-testluks.mount
# systemctl start systemd-cryptsetup@testluks.service
# systemctl start mnt-testluks.mount
Hier muss in der Zeile Requires= das .mount-Unit angepasst sowie die Dienste, die von verschlüsselten Daten abhängen (z.B. smbd, nginx, mysql) ergänzt werden.
[Unit] Description=Decrypted System Requires=default.target After=default.target Conflicts=systemd-ask-password-console.path systemd-ask-password-console.service systemd-ask-password-plymouth.path systemd-ask-password-plymouth.service Requires=systemd-cryptsetup@testluks.service mnt-testluks.mount
[Unit] Description=Start full system after decryption Requires=decrypt.target After=decrypt.target Requires=yoko.mount
Dieser Ordner enthält die Abhängigkeiten für den “Urzustand”. Am besten multi-user.target.wants/ klonen und sicherstellen, dass diese Dienste vorhanden sind:
networking.servicessh.servicesystemd-logind.servicesystemd-user-sessions.serviceHierhin kommen alle Dienste, die von dem LUKS-Volume abhängig sind. Z.B.:
lighttpd.servicetransmission.service
# systemctl daemon-reload
# reboot
# systemctl start decrypt.target
# systemctl start start-full-system.target
# systemctl set-default before-decrypt
#!/bin/sh sudo systemctl start decrypt.target sleep 5 sudo systemctl start start-full-system.target