Verschlüsselte Debian Remoteinstall mit Debootstrap
Partionieren, FS schreiben und mounten
Partionslayout schreiben, 256MB bootable 0x83, zweite für dmcrypt:
fdisk /dev/sda
Boot-FS schreiben
mkfs.ext3 /dev/sda1 -L boot
Verschlüsseln
dd if=/dev/urandom of=/dev/sda2
cryptsetup luksFormat -c aes-xts-plain -s 512 -h sha512 --align-payload=2048 /dev/sda2
LVM erstellen
cryptsetup luksOpen /dev/sda2 ssd-crypt
vgcreate pve /dev/mapper/ssd-crypt
Logicalvolumes erstellen
lvcreate -n root -L 4G pve
lvcreate -n swap -L 4G pve
Rest nach belieben.
LVs formartieren
mkfs.ext3 /dev/mapper/pve-root -L root
mkfs.ext3 /dev/mapper/pve-data -L data
Laut Proxmoxsupport-Aussage von Sommer 2012 ist EXT3 performanter als EXT4.
mkswap /dev/mapper/pve-swap -L swap
swapon /dev/mapper/pve-swap
Mounten
mkdir /mnt/dstrap
mount /dev/mapper/pve-root /mnt/dstrap
mkdir /mnt/dstrap/boot
mount /dev/sda1 /mnt/dstrap/boot
Debootstrap
debootstrap --verbose --arch=amd64 squeeze /mnt/dstrap/
ftp://ftp.de.debian.org/debian/
Netzwerkinfos notieren und anpassen
nano /mnt/dstrap/etc/resolv.conf
nano /mnt/dstrap/etc/network/interfaces
nano /mnt/dstrap/etc/hostname
Hostname zu hosts hinzufügen:
nano /mnt/dstrap/etc/hosts
nano /mnt/dstrap/etc/apt/sources.list
#squeeze
deb
Index of /debian squeeze main contrib non-free
deb
Index of /debian squeeze-updates main contrib non-free
deb
Index of /debian-security squeeze/updates main contrib non-free
deb
Index of /debian-backports squeeze-backports main contrib non-free
deb-src
Index of /debian squeeze main contrib non-free
deb-src
Index of /debian squeeze-updates main contrib non-free
deb-src
Index of /debian-security squeeze/updates main contrib non-free
deb-src
Index of /debian-backports squeeze-backports main contrib non-free
nano /etc/apt/preferences
# APT PINNING PREFERENCES
Package: *
Pin: release a=squeeze-backports
Pin-Priority: 200
fstab und crypttab schreiben
blkid /dev/sda1 /dev/mapper/pve-root /dev/mapper/pve-swap
nano /mnt/dstrap/etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
UUID=09e250b8-1cb6-4982-9cf7-26c5fc51df1d / ext3 defaults 0 1
UUID=af86157b-7b5f-41d9-9927-6599d4d8e686 /boot ext3 defaults 0 2
UUID=612ed8ed-dc70-4e35-98d2-031c5ab14230 none swap sw 0 0
echo "ssd-crypt UUID=`blkid -s UUID -o value /dev/sda2` none luks" | tee -a /mnt/dstrap/etc/crypttab
Chrooten in das gedebootstrapte System
mount -o rbind /dev /mnt/dstrap/dev
mount -t tmpfs none /mnt/dstrap/tmp
mount -t proc proc /mnt/dstrap/proc
mount -t sysfs sys /mnt/dstrap/sys
chroot /mnt/dstrap /bin/bash
System updaten und Packete installieren
passwd
aptitude update
aptitude install locales
dpkg-reconfigure locales -plow
Deutsche und englische Locales wählen, als Standard en_US.UTF-8
aptitude full-upgrade
aptitude install -t squeeze-backports linux-image-amd64 linux-headers-amd64 firmware-linux firmware-linux-free firmware-linux-nonfree
aptitude install grub2 module-init-tools cryptsetup lvm2 openssh-server console-setup
aptitude install zsh ntp rcconf nano rsync pv lsof screen hddtemp lm-sensors pciutils
aptitude install -t squeeze-backports smartmontools
update-smart-drivedb
aptitude install acpid
System konfigurieren
dpkg-reconfigure console-setup
dpkg-reconfigure grub-pc
GRUB_CMDLINE_LINUX_DEFAULT="kopt=root=/dev/mapper/pve-root"
dpkg-reconfigure --all --unseen-only
Bei Error
dpkg-maintscript-helper: error: couldn't identify the package
"Manuell" durchführen:
for i in `dpkg --get-selections | awk '{print $1}'` ; do dpkg-reconfigure -plow $i ; done
Default Shell für neue User auf zsh setzen:
nano /etc/adduser.conf
/etc/initramfs-tools/modules anpassen
echo "lvm" >> /etc/initramfs-tools/modules
echo "e1000" >> /etc/initramfs-tools/modules
echo "e1000e" >> /etc/initramfs-tools/modules
echo "aes" >> /etc/initramfs-tools/modules
echo "aes_i586" >> /etc/initramfs-tools/modules
echo "aes_x86_64" >> /etc/initramfs-tools/modules
echo "aes_generic" >> /etc/initramfs-tools/modules
echo "dm-crypt" >> /etc/initramfs-tools/modules
echo "dm-mod" >> /etc/initramfs-tools/modules
echo "sha256" >> /etc/initramfs-tools/modules
echo "sha256_generic" >> /etc/initramfs-tools/modules
echo "lrw" >> /etc/initramfs-tools/modules
echo "xts" >> /etc/initramfs-tools/modules
echo "crypto_blkcipher" >> /etc/initramfs-tools/modules
echo "gf128mul" >> /etc/initramfs-tools/modules
cp /usr/share/initramfs-tools/hooks/cryptroot /etc/initramfs-tools/hooks/
cp /usr/share/initramfs-tools/hooks/udev /etc/initramfs-tools/hooks/
cp /usr/share/initramfs-tools/scripts/local-top/cryptroot /etc/initramfs-tools/scripts/local-top/
update-initramfs -u -k all
Kann ignoriert werden:
W: Possible missing firmware /lib/firmware/isci/isci_firmware.bin for module isci
cryptsetup: WARNING: invalid line in /etc/crypttab -
Chroot verlassen und Neustarten
exit
sync
umount /mnt/dstrap/sys
umount /mnt/dstrap/proc
umount /mnt/dstrap/dev/pts
umount /mnt/dstrap/dev
umount /mnt/dstrap/tmp
umount /mnt/dstrap/boot
umount /mnt/dstrap
lvchange -a n pve
cryptsetup luksClose ssd-crypt
reboot
Sollte sich etwas nicht unmounten lassen, lazy unmount, also umount -l probieren, ansonsten noch lsof | grep /mnt/dstrap und dann die Prozesse einzeln killen.
Sollte nun alles geklappt haben wird man nach dem Reboot nach dem Passwort zum Entschlüsseln gefragt, damit das ganze später auch ohne Remoteconsole/IPMI funktioniert, nun folgendes:
aptitude install busybox dropbear
nano /etc/initramfs-tools/initramfs.conf
BUSYBOX=y
DROPBEAR=y
Und noch die Netzwerkkarte konfigurieren.
DHCP:
#
# DEVICE: ...
#
# Specify the network interface, like eth0
#
DEVICE=eth0
Statische IP:
DEVICE=eth0
IP=:10.0.13.37::255.255.255.0::eth0
ff
Automatisch generierterer Keystuff:
ls /etc/initramfs-tools/etc/dropbear/
ls /etc/initramfs-tools/root/.ssh
nano /etc/initramfs-tools/root/.ssh/authorized_keys
Vorkonfigurierten Privatekey rausnehmen und durch eigenen ersetzen.
reboot
Nun sollte man sehen wie sich die Initrd eine IP via DHCP holt, auf Port 22 läuft dann Dropbear.
Nun mit seinem Privatekey drauf verbinden und mit
echo -n "MEIN PASSWORT EINSETZEN" > /lib/cryptsetup/passfifo
unlocken.
Das Ganze kann man natürlich auch automatisieren:
ssh -i .ssh/dropbear/id_rsa_initram -o UserKnownHostsFile=.ssh/dropbear/known_hosts root@10.0.13.37 "echo -ne \"MEIN PASSWORT EINSETZEN\" > /lib/cryptsetup/passfifo"
Nützliche Links
System verschlüsseln
[Tutorial] Debian Squeeze from Scratch - Server Support Forum
[SOLVED] Ubuntu 11.10 FDE w/ XTS - Ubuntu Forums
Remoteunlock:
Voll-verschlüsseltes-System via SSH freischalten
Remotely Unlock Fully Encrypted Debian Squeeze | HowtoForge - Linux Howtos and Tutorials