====== LUKS-Volumes per systemd einbinden ====== === Beschreibung === 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. === Schema === Das System bootet in drei Schritten: - ''before-decrypt.target'' * //gerade genug für Netzwerk und Login// - ''decrypt.target'' * //während dieser Phase wird das Volume entschlüsselt und gemountet// - ''start-full-system.target'' * //anschließend werden alle abhängigen Dienste gestartet// == UUID des LUKS-Containers ermitteln == ''lsblk -f | grep crypto_LUKS'' == /etc/crypttab bearbeiten == testluks UUID=4cf5deb5-d953-c8af-7ef0-52f48771a964 none luks,noauto == /etc/fstab bearbeiten == /dev/mapper/testluks /mnt/testluks ext4 defaults,rw,noauto 0 0 == Dienste abschalten, die von verschlüsselten Daten abhängen == z.B.: ''# systemctl disable smbd nginx mysql ...'' == Daemon-reload == ''# systemctl daemon-reload'' == Automatisches systemd.mount ermitteln: == ''# ls -1 /run/systemd/generator/*.mount'' /run/systemd/generator/mnt-testluks.mount == systemd-cryptsetup@XXX.service testen == ''# systemctl start systemd-cryptsetup@testluks.service'' == systemd.mount testen == ''# systemctl start mnt-testluks.mount'' == /etc/systemd/system/decrypt.target == 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 == /etc/systemd/system/start-full-system.target == [Unit] Description=Start full system after decryption Requires=decrypt.target After=decrypt.target Requires=yoko.mount == /etc/systemd/system/before-decrypt.target.wants/ befüllen == 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.service'' * ''ssh.service'' * ''systemd-logind.service'' * **''systemd-user-sessions.service''** == /etc/systemd/system/start-full-system.target.wants/ befüllen == Hierhin kommen alle Dienste, die von dem LUKS-Volume abhängig sind. Z.B.: * ''lighttpd.service'' * ''transmission.service'' * ... == Daemon-reload == ''# systemctl daemon-reload'' == Rebooten und testen == ''# reboot'' ''# systemctl start decrypt.target'' ''# systemctl start start-full-system.target'' == Neues target als Default setzen == ''# systemctl set-default before-decrypt'' == Bonus-Skript /usr/local/bin/decrypt == #!/bin/sh sudo systemctl start decrypt.target sleep 5 sudo systemctl start start-full-system.target