В данной статье речь пойдет о установки 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 раздела :
- ada0p1 — загручик
- ada0p2 — тут будет находится /boot для начальной загрузки ОС
- 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
Взято и переведено частично с сайта