Idee: wenn mein Laptop z.b. im Urlaub geklaut wird, dann sind meine Daten weg und ich hab keine Kontrolle mehr was mit den geklauten Daten passiert. Das betrifft eine Menge meiner persoenlichen Daten wie Bilder die ich gemacht habe oder den Emails usw.

Darum: festplatte verschluesseln und wie das geht, steht hier.

Anmerkung: Ich hab meine Festplatte jetzt schon sehr lange mit diesem Setup im Betrieb und ich habe keine Probleme damit - das tut einfach richtig gut.

Backup erstellen:

via cd/usb boot

  • gentoo live 2008 cd runterladen
  • boot cd erstellen: entweder brennnen und von cd booten
  • oder usb live stick bauen und via usb booten

Ziel: kopieren von / (also das ganze root filesystem, nicht nur home)

zu backuppende partitionstypen:

aus dem laufenden system mit xfs

da das system noch laueft bzw das datensystem noch eingehaengt ist, kann es hier zu inkonsistenzen kommen. d.h. nicht empfohlen

  • alle services stoppen ausser sshd
  • lsattr: d-flags checken. mit chattr aendern.
  • xfsdump erstellen

kernel anpassen:

update

gentoo hat seit einiger zeit im genkernel script initrd support. d.h. man muss kein initrd script selber schreiben!

das geht auch ganz einfach:

  • kernel muss natuerlich fuer luks bereit sein, am besten die wichtigen sachen nicht als module sondern in den kernel!
  • lvm2 mit use static installieren
  • cryptsetup installieren
  • genkernel installieren

den kernel baue ich nicht via genkernel, aber das initramfs names: initramfs-genkernel-x86_64-2.6.31-gentoo-r6

genkernel --lvm2 --luks ramdisk

$ cat /boot/grub/menu.lst
timeout 10
default saved

title=vmlinuz-2.6.31-gentoo-r6
root (hd0,0)
kernel (hd0,0)/vmlinuz-2.6.31-gentoo-r6 dolvm root=/dev/ram0 crypt_root=/dev/sda3 real_root=/dev/vg/root
initrd /initramfs-genkernel-x86_64-2.6.31-gentoo-r6
savedefault

zusammengefasst:

  • /dev/sda1 ist boot mit 100mb
  • /dev/sda2 ist unbelegt
  • /dev/sda3 ist luks volume
  • (/dev/sda3 nach luksOpen) /dev/vg/root ist /
  • (/dev/sda3 nach luksOpen) /dev/vg/swap ist swap

initramfs

files anlegen: /root/initramfs/init.sh, /root/initramfs/list und /root/initramfs/lvm.conf:

  • /root/initramfs/init.sh
  • #!/bin/ash
  • export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
  • mount -t proc proc /proc
  • mount -t sysfs sysfs /sys
  • sysctl -w kernel.panic=10
  • CMDLINE=`cat /proc/cmdline`
  • sleep 1
  • cryptsetup luksOpen /dev/hda2 luks
  • vgscan
  • vgchange -ay
  • echo 1 > /sys/power/suspend2/do_resume
  • mount -t xfs -o noatime /dev/vg/root /mnt/new
  • sync
  • sync
  • umount /proc
  • umount /sys
  • exec switch_root /mnt/new /sbin/init ${CMDLINE}
  • /root/initramfs/list
  • dir /bin 755 0 0
    • dir /dev 755 0 0
  • dir /dev/mapper 700 0 0
  • dir /proc 755 0 0
  • dir /sys 755 0 0
  • dir /mnt 755 0 0
  • dir /mnt/new 755 0 0
  • dir /etc 755 0 0
  • dir /etc/lvm 755 0 0
  • file /init /root/initramfs/init.sh 755 0 0
  • file /etc/lvm.conf /root/initramfs/lvm.conf 644 0 0
  • file /bin/cryptsetup /bin/cryptsetup 755 0 0
  • file /bin/busybox /bin/busybox 755 0 0
  • file /bin/lvm /sbin/lvm 755 0 0
  • nod /dev/console 644 0 0 c 5 1
  • nod /dev/loop0 644 0 0 b 7 0
  • nod /dev/hda 660 0 6 b 3 0
  • nod /dev/hda1 660 0 6 b 3 1
  • nod /dev/hda2 660 0 6 b 3 2
  • #nod /dev/tty 666 0 5 c 5 0
  • slink /dev/tty /dev/console 777 0 0
  • slink /bin/ash busybox 777 0 0
  • slink /bin/echo busybox 777 0 0
  • slink /bin/umount busybox 777 0 0
  • slink /bin/mount busybox 777 0 0
  • slink /bin/sysctl busybox 777 0 0
  • slink /bin/cat busybox 777 0 0
  • slink /bin/sleep busybox 777 0 0
  • slink /bin/sysctl busybox 777 0 0
  • slink /bin/sync busybox 777 0 0
  • slink /bin/sh busybox 777 0 0
  • slink /bin/switch_root busybox 777 0 0
  • slink /bin/vgscan lvm 777 0 0
  • slink /bin/vgchange lvm 777 0 0
  • /root/initramfs/lvm.conf
  • filter=["a|^/dev/mapper/luks|", "r/.*/"]

kernel config

echo "sys-kernel/suspend2-sources >> /etc/portage/package.keywords"
echo "sys-kernel/suspend2-sources >> /etc/portage/package.unmask"
emerge sys-kernel/suspend2-sources -avt

General setup:

[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
(/root/initramfs/list) Initramfs source file(s)

Power management options (ACPI, APM):

<*>   Suspend2  --->
      <*>   Swap Allocator
      <*>   Compression support
      <*>   Userspace User Interface support
      (/dev/mapper/vg-swap) Default resume device name
      [*]   Allow Keep Image Mode
      [*]   Replace swsusp by default

Device Drivers -> Block devices:

<*> Loopback device support
<*>   Cryptoloop Support

Device Drivers -> Multi-device support (RAID and LVM):

<*>   Device mapper support
<*>     Crypt target support

Cryptographic options:

<*>   SHA256 digest algorithm
<*>   AES cipher algorithms
<*>   AES cipher algorithms (i586)
<*>   LZF compression algorithm

Partitionierung und Filesysteme erstellen:

  • livecd mit xfsrestore und cryptsetup-luks booten (z.B gentoo-2007.0 liveDVD)
  • partitionieren (z.B. mit cfdisk)
    /dev/hda1 Boot (100MB)
    /dev/hda2 spaetere verschluesselte partition (Rest) - (Type 83/Linux)
  • TODO: ggf. hda2 mit random vollschreiben
    dd if=/dev/urandom of=/dev/sda
    #(go and take a nap, because this takes a long time to finish)
    # if you used /dev/random come back in 100 years
  • mit cryptsetup die verschluesselte Partition erstellen:
    cryptsetup luksFormat /dev/hda2 --cipher aes-cbc-essiv:sha256 --key-size 256 --verify-passphrase
  • verschluesselte Partition mounten:
    cryptsetup luksOpen /dev/hda2 luks
  • nun lvm Partitionen erstellen:
    pvcreate /dev/mapper/luks
    vgcreate vg /dev/mapper/luks
    vgscan
    vgchange -ay
    #1Gb swap:
    lvcreate -L1G -nswap vg
    #60Gb /:
    lvcreate -L60G -nroot vg
  • swap und xfs-Filesystem anlegen:
    mkswap "/dev/vg/swap"
    mkfs.xfs -f "/dev/vg/root"

dmeventd

since this error showed up on vg-snap creation and on vg-snap removal:

# lvremove /dev/mapper/vg-snap          249 3 pts/1 ~/config root@Z3 08-11-10  18:23:55
Do you really want to remove active logical volume "snap"? [y/n]: y
  Unable to start dmeventd.
  Logical volume "snap" successfully removed

I had to start the dmeventd service with:

/etc/init.d/dmeventd start  # once
dmeventd added to runlevel boot  # every boot, automatically gentoo like

Backup zurueckspielen:

Auf dem fileserver kann dann das backup auf den laptop zurueckgespielt werden. Dazu muss das Backup-datum.xfsdump file nicht kopiert werden sondern wir machen das via einer ssh pipe direkt auf das Zielsystem (den laptop).

In meinem fall hat auf dem 64bit gentoo boot stick das xfsrestore binary gefehlt. Ich hab dann das von einem 32bit system verwendet, dazu:

# ldd =xfsrestore
       linux-gate.so.1 =>  (0xb7f23000)
       libuuid.so.1 => /lib/libuuid.so.1 (0xb7eef000)
       libhandle.so.1 => /lib/libhandle.so.1 (0xb7eeb000)
       libattr.so.1 => /lib/libattr.so.1 (0xb7ee6000)
       libc.so.6 => /lib/libc.so.6 (0xb7db6000)
       /lib/ld-linux.so.2 (0xb7f24000)

Dann muessen die files kopiert werden (libc.so.6 war beim 64bit sys schon dabei):

scp /usr/bin/xfsrestore root@10.0.0.2:/root
scp /lib/libuuid.so.1 root@10.0.0.2:/root
scp /lib/libhandle.so.1 root@10.0.0.2:/root
scp /lib/libattr.so.1 root@10.0.0.2:/root

ACHTUNG: das filesystem auf dem laptop wo man zurueckspielen will muss mit mkfs.xfs /dev/sdX2 erstellt sein und man muss es vor dem zurueckspielen mounten, ich hab es unter /mnt/gentoo gemounted.

So nun noch das backup vom fileserver aus zurueckspielen:

cat backup081128.xfsdump | ssh root@10.0.0.2 "export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH; /root/xfsrestore - /mnt/gentoo"


links

Powered by MediaWiki