Re: Linux distro w/loop-aes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> > It's easier to install Ubuntu in the normal way and then encrypt
> > the devices with aespipe,....  
> That´s the way I do it and for which I need statically linked gpg and
> aespipe.

Just boot from a live-cd with aespipe to encrypt your root device. 
I think, this is easier than the steps described in the README of
loop-AES.


> Kubuntu 7.04 and 7.10 don´t have usbcore, usbstorage or vfat built-in.
> So a  kernel recompile is needed. Since I am not familiar with 
> debian/ubuntu scripts it would be fine to understand your steps
> towards full disk-encryption a little better. Especially how to build
> an initial ramdisk for booting from usb memory without
> build-initrd.sh would be nice to learn.

No, recompling is necessary because the loop-aes package don't provide
multi-key mode. But perhaps this have changed with 7.10. I could
boot from usb-stick without touching the kernel in ubuntu 7.04 and
earlier. Below you can see my scripts for the initramfs-tool. See "man
initramfs-tools" for further explanations,...

First I wrote a script called 'crypt'.
It contains all commands to set up my encrypted disks (including root)
and all necessary passhrases in cleartext (I like to have only one
passphrase for all encrypted devices,....): 
----------
echo "passwortxxxxxxxxxxxxxxxxxxxx" | losetup  -p
0 ..... /dev/loop0 /dev/hdaY 

# or multiy-key-mode : 
echo -e -n
"passskddddddddddddsfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nadsfffffffffffffff[....]
| losetup -p 0 ..... /dev/loop1 /dev/hdaX

# temporay keys for swap and temp:
TEMP=$(gpg --gen-random 1 42 | openssl enc -base64)
KEY=$(echo
"$TEMP""YuKq9YvT1ckVOQAQ/nOTm4EyPpYRKLYsJKLh7/BWb2AB+oLkzqC/cUwc" | \
hashalot sha512 -n 63 | openssl enc -base64 | tr -d "\n")

echo "$KEY" | losetup -p 0 ..... /dev/loop2 /dev/hda88
mkfs.xfs /dev/loop2

TEMP=$(gpg --gen-random 1 42 | openssl enc -base64)
KEY=$(echo
"$TEMP""Ou/miNXJ3yjuj3HnAaaoTVcgd1jNkWbRGUjnS0hERymoQoYfWikLpwun" | \
hashalot sha512 -n 63 | openssl enc -base64 | tr -d "\n") 
echo "$KEY" | losetup -p 0 ..... /dev/loop3 /dev/hda999

mkswap /dev/loop3
----------

If I would execute this script from live-cd, all devices would be
accessible according to my /etc/fstab (but not mounted of course):
------------
....
/dev/loop0      /       ext3    defaults,errors=remount-ro 0       1
/dev/loop1      /home           ext3    defaults        0       2
/dev/loop2              /tmp    xfs     defaults        0       0
/dev/loop3              none    swap    sw              0       0
.....
------------

Then I encrypt this script with gpg:
gpg -c --cipher-algo AES256 --s2k-mode 3 --s2k-cipher-algo AES256
--s2k-digest-algo SHA512 --s2k-count 65011712 --force-mdc --digest-algo
SHA512 crypt

The name of the encrypted file is '/home/crypt/crypt.gpg'

/etc/initramfs/modules:
-----------
loop
# loop_blowfish
# loop_serpent
# loop_twofish 
# perhaps you have to add other modules here
# it depends on your hardware and kernel....
-----------


/etc/initramfs-tools/hooks/loopcrypt (this file is used  when an
initramfs image is created):
-------------
#!/bin/bash 
. /usr/share/initramfs-tools/hook-functions

mkdir -p ${DESTDIR}/boot
mkdir -p ${DESTDIR}/sbin
mkdir -p ${DESTDIR}/usr/bin
mkdir -p ${DESTDIR}/bin
mkdir -p ${DESTDIR}/gnupg
mkdir -p ${DESTDIR}/.gnupg

cp -p /home/crypt/crypt.gpg ${DESTDIR}/boot  # my encrytped script
cp -p /usr/share/gnupg/options.skel ${DESTDIR}/gnupg
cp -p /usr/share/gnupg/options.skel ${DESTDIR}/.gnupg/gpg.conf

# you don't need to care about "statically linking"
# copy_exec will detect which libraries are necessary and copy
# them to your initrd,....
copy_exec /bin/bash /bin
copy_exec /sbin/mkfs.xfs /sbin
copy_exec /sbin/losetup /sbin
copy_exec /sbin/mkswap /sbin
copy_exec /usr/bin/gpg /usr/bin
copy_exec /usr/bin/tr /usr/bin
copy_exec /usr/bin/openssl /usr/bin
copy_exec /usr/sbin/hashalot /usr/bin
----------------


The following script will be executed at each boot-process, before the
root-partition is mounted.
/etc/initramfs-tools/scripts/local-top/loopcrypt:
--------------- 
#!/bin/bash
HD='/dev/hda' # the disk with the encrypted partitions
# if you have more than one disk with encrypted partitions,
# you need to modify the first while-loop

CRYPTFILE='/boot/crypt.gpg'

PREREQ="udev"

PASS=""
PLAIN=""
TEST=1

prereqs()
{
        echo "$PREREQ"
}

case "$1" in
    prereqs)
        prereqs
        exit 0
        ;;
esac


echo "Waiting ..."

slumber=1800
while [ ${slumber} -gt 0 -a ! -e "$HD" ]; do
        /bin/sleep 0.1
        slumber=$(( ${slumber} - 1 ))
done

while [ 0 != $TEST ] ; do
  echo "password:"
  read -s PASS
  PLAIN=$(cat "$CRYPTFILE" | gpg --decrypt --no-tty --quiet
--no-verbose --passphrase-fd 8 8<<<"$PASS") 
   if [ ${#PLAIN} -ge 30 ]; then 
	TEST=0
   else
     echo "try it again..."
   fi
done

oldIFS="$IFS"
IFS="${Newline}"
  eval "$PLAIN"
IFS="$oldIFS"

PASS=""
PLAIN=""
TEST=1
---------------

You can build a new initrd with 'update-initramfs -u'. 


Creation of the usb-stick (/dev/sdg). 
The commands will destroy all data on the stick!

$ dd if=/dev/zero of=/dev/sdg bs=8192 count=22
$ mkdosfs /dev/sdg
$ syslinux /dev/sdg
$ mount /dev/sdg /mnt/stick
$ cp /boot/initrd.your.version /mnt/stick/initrd
$ cp /boot/vmlinuz-your.version /mnt/stick/vmlinuz
$ cp /path/to/syslinux.cfg /mnt/stick/syslinux.cfg
$ sync

syslinux.cfg:
---
default vmlinuz
append initrd=initrd root=/dev/loopX
---
/dev/loopX must be your root-partition according to /etc/fstab!


The size of your initrd.img doesn't matter as long as your usb-stick
and RAM is large enough,...

cu,
 Rudi


-
Linux-crypto:  cryptography in and on the Linux system
Archive:       http://mail.nl.linux.org/linux-crypto/



[Index of Archives]     [Kernel]     [Linux Crypto]     [Gnu Crypto]     [Gnu Classpath]     [Netfilter]     [Bugtraq]
  Powered by Linux