Установка FreeBSD 9 на шифрованный раздел ZFS

В данной статье речь пойдет о установки FreeBSD на зашифрованный раздел диска.

0) Загрузимся с установочного диска в Live CD режиме

1) Разобьем диск


gpart create -s gpt ada0
gpart add -s 128 -t freebsd-boot ada0
gpart add -s 2G -t freebsd-zfs ada0
gpart add -t freebsd-zfs ada0

У нас получилось 3 раздела :

  1. ada0p1 — загручик
  2. ada0p2 — тут будет находится /boot для начальной загрузки ОС
  3. ada0p3 — шифрованные раздел с основной системой

2) Запишем загрузчик


gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0

3) Создадим диск для /boot/zfs


mdconfig -a -t malloc -s 128m -u 2
newfs -O2 /dev/md2
mount /dev/md2 /boot/zfs

4) Подгрузим модули ядра для ZFS и шифрования

kldload opensolaris
kldload zfs
kldload geom_eli

5) Создадим  ZFS pool для /boot


zpool create bootdir mirror /dev/ada0p2
zpool set bootfs=bootdir bootdir
mkdir /boot/zfs/bootdir
zfs set mountpoint=/boot/zfs/bootdir bootdir
zfs mount bootdir

6) Подготовим ключи шифрования и инициализируем его с разделом
Введите пароль для фазы инициализации (geli init), этот пароль нужно будет вводить при загрузке системы (запомните его).


dd if=/dev/random of=/boot/zfs/bootdir/encryption.key bs=4096 count=1
geli init -b -B /boot/zfs/bootdir/da0p3.eli -e AES-XTS -K /boot/zfs/bootdir/encryption.key -l 256 -s 4096 /dev/ada0p3
geli attach -k /boot/zfs/bootdir/encryption.key /dev/ada0p3

7.1) Создадим ZFS pool для основной системы


zpool create zroot raidz1 /dev/ada0p3.eli
zfs set mountpoint=/boot/zfs/zroot zroot
zfs mount zroot
zfs unmount bootdir
mkdir /boot/zfs/zroot/bootdir
zfs set mountpoint=/boot/zfs/zroot/bootdir bootdir
zfs mount bootdir

7.2) Можно так же создать различные дата сэты (по желанию)


zfs set checksum=fletcher4 zroot
zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
chmod 1777 /boot/zfs/zroot/tmp
zfs create zroot/usr
zfs create zroot/usr/home
cd /boot/zfs/zroot; ln -s /usr/home home
zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
zfs create zroot/var
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
zfs create -o exec=off -o setuid=off zroot/var/db
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
zfs create -o exec=off -o setuid=off zroot/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
zfs create -o exec=off -o setuid=off zroot/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp
chmod 1777 /boot/zfs/zroot/var/tmp

8) Установим FreeBSD


cd /boot/zfs/zroot
unxz -c /usr/freebsd-dist/base.txz | tar xpf -
unxz -c /usr/freebsd-dist/kernel.txz | tar xpf -
unxz -c /usr/freebsd-dist/src.txz | tar xpf -

9) Настройка FreeBSD


chroot /boot/zfs/zroot

Скопируем ключи в незашифрованную область


cd /
mv boot bootdir/
ln -fs bootdir/boot
mv bootdir/encryption.key bootdir/boot/
mv bootdir/*.eli bootdir/boot/

Включим поддержку ZFS и настроим загрузчик для работы с шифрованным разделом


echo ‘zfs_enable=”YES”‘ > /etc/rc.conf
touch /etc/fstab
echo ‘vfs.zfs.prefetch_disable=”1″‘ > /boot/loader.conf
echo ‘vfs.root.mountfrom=”zfs:zroot”‘ >> /boot/loader.conf
echo ‘zfs_load=”YES”‘ >> /boot/loader.conf
echo ‘aesni_load=”YES”‘ >> /boot/loader.conf
echo ‘geom_eli_load=”YES”‘ >> /boot/loader.conf
echo ‘geli_ada0p3_keyfile0_load=”YES”‘ >> /boot/loader.conf
echo ‘geli_ada0p3_keyfile0_type=”ada0p3:geli_keyfile0″‘ >> /boot/loader.conf
echo ‘geli_ada0p3_keyfile0_name=”/boot/encryption.key”‘ >> /boot/loader.conf

Установим пароль администратора, настроим временную зону


passwd root
tzsetup
cd /etc/mail
make aliases
exit

10) Что бы загрузчик смог прочесть ZFS pool’ы скопируем cache


cd /boot/zfs
cp /boot/zfs/zpool.cache /boot/zfs/zroot/boot/zfs/zpool.cache

11) Размонтируем ZFS и изменим точки монтирования


zfs unmount -a
zfs set mountpoint=legacy zroot
zfs set mountpoint=/bootdir bootdir

И если делали дополнительную разбивку из пункта 7.2


zfs set mountpoint=/tmp zroot/tmp
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var

12) reboot

Взято и переведено частично с сайта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *