Monday, July 24th, 2017

Зашифрованная корневая файловая система в Linux

Published on Апрель 23, 2009 by   ·   Комментариев нет

В  стать

Is It Possible To Get Your Ex Back From Another Guy

е  описывается  процедура  настройки  сервера  с зашифрованной
корневой файловой системой. Процедура довольно тривиальная, но требует
поверхностного знакомства с Debian.

Цель

Сервер  на  базе  Debian  GNU/Linux  4.0 Etch с зашифрованной корневой
файловой системой и разделами подкачки.

Средства

* сервер IBM eBusiness xSeries 206
* 4 HDD по 160 Gb
* компакт-диск debian-netinst
* Internet соединение

У  xSeries  206  есть  2  порта  SATA  и  1  двухканальный IDE, но мне
необходимо было использовать 4 IDE диска (таково ТЗ, и это обусловлено
реальной необходимостью). Поэтому был приобретён PCI IDE контроллер. В
итоге  я  получил  4  диска  через PCI IDE и CDROM, подключённый через
набортный IDE. Отсюда такие имена устройств.

Замечания

* с  таким же успехом можно делать установку с полного дистрибутива,
не имея Internet соединения
* с  незначительными модификациями процедура может быть использована
для установки Ubuntu 6.10 Edgy Eft или 7.04 Feisty Fawn
* жесткие  диски  перед  использованием желательно забить случайными
данными

Шаги

1. создаём разделы, необходимые для базовой установки
2. устанавливаем базовую систему в тот раздел, который позднее станет
одним из swap-разделов, загружаемся с него
3. устанавливаем необходимые пакеты
4. создаём raid массивы
5. шифруем созданные массивы

Разметка дисков

Disk /dev/hde: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/hde1   *           1          31      248976   fd  Linux raid autodetect
/dev/hde2              32          93      498015   83  Linux
/dev/hde3              94         336     1951897+  fd  Linux raid autodetect
/dev/hde4             337       19457   153589432+  fd  Linux raid autodetect

Disk /dev/hdf: 300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/hdf1               1       36483   293049666   fd  Linux raid autodetect

Disk /dev/hdg: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/hdg1   *           1          31      248976   fd  Linux raid autodetect
/dev/hdg2              32          93      498015   82  Linux swap / Solaris
/dev/hdg3              94         336     1951897+  fd  Linux raid autodetect
/dev/hdg4             337       19457   153589432+  fd  Linux raid autodetect

Disk /dev/hdh: 300.0 GB, 300069052416 bytes
255 heads, 63 sectors/track, 36481 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/hdh1               1       36481   293033601   fd  Linux raid autodetect

/dev/hde1 и /dev/hdg1 объединяем в RAID-1, используем как /boot, метим
как  загрузочный.  /dev/hde2  используем как корневой раздел, позже от
него избавимся. Остальные разделы пока не используем. Файловая система
здесь не существенна, я использую ext3.

Устанваливаем необходимые пакеты

# aptitude install cryptsetup lvm2

Создаем RAID массивы

Их нужно создать 3 штуки:

* /dev/hde3  +  /dev/hdg3  (это  потом станет зашифрованной корневой
системой)

* /dev/hde4 + /dev/hdg4 (будет шифрованным физическим томом для lvm)

* /dev/hdf1  +  /dev/hdh1  (будет  ещё  одним шифрованным физическим
томом для lvm)

# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/hde3 /dev/hdg3
# mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/hde4 /dev/hdg4
# mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/hdf1 /dev/hdh1

Выясняем UUID каждого массива:

# mdadm --misc --detail /dev/md1|grep UUID
# mdadm --misc --detail /dev/md2|grep UUID
# mdadm --misc --detail /dev/md3|grep UUID

Прописываем  массивы  в  `/etc/mdadm/mdadm.conf`  (добавляем  строчки,
подставив соответствующие значиения UUID):

ARRAY /dev/md1 level=raid1 num-devices=2 UUID=xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx
ARRAY /dev/md3 level=raid1 num-devices=2 UUID=xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx

Теперь лучше дождаться завершения синхронизации RAID. Отсследить можно
командой:

# mdadm --misc --detail /dev/md1

Там  смотрим  на  «State  : active, resyncing» и «Rebuild Status : 27%
complete».  Процесс  может занять весьма ощутимое время, так что лучше
оставить это счастье синхронизироваться на ночь.

Создаем шифрованные тома

# cryptsetup -c aes-cbc-essiv:sha256 -s 256 luksFormat /dev/md1
# cryptsetup -c aes-cbc-essiv:sha256 -s 256 luksFormat /dev/md2
# cryptsetup -c aes-cbc-essiv:sha256 -s 256 luksFormat /dev/md3

Там  задаёт  интерактивные  вопросы,  нужно  для начала набрать именно
большими  буквами  YES,  потом  дважды  пароль.  В итоге получатся три
зашифрованных раздела.

Полученные разделы нужно добавить в `/etc/crypttab`:

root /dev/md1 none luks,cipher=aes-cbc-essiv:sha256
lvm1 /dev/md2 none luks,cipher=aes-cbc-essiv:sha256
lvm2 /dev/md3 none luks,cipher=aes-cbc-essiv:sha256
<div style="display: none"><a href="http://wikiexback.com/wish-to-get-your-ex-back-read-these-three-basic-signals-to-find-out-whether-heshe-nevertheless-adores-you/" title="Is It Possible To Get Your Ex Back From Another Guy">Is It Possible To Get Your Ex Back From Another Guy</a></div>

И открывем их:

# /etc/init.d/cryptdisks restart

Будущий корневой раздел сразу форматируем:

# mkfs -t ext3 /dev/mapper/root

Настраиваем LVM

Создаём physical volumes и volume group:

# pvcreate /dev/mapper/lvm1
# pvcreate /dev/mapper/lvm2
# vgcreate vg1 /dev/mapper/lvm1 /dev/mapper/lvm2

Хорошая идея всегда иметь немного оперативного пространства (например,
на  тот  случай,  если у нас заведутся необъятные логи), поэтому часть
пространства при создании logical volumes оставляем нераспределённым:

# lvcreate --name usr --size 4G vg1
# lvcreate --name var --size 4G vg1
# lvcreate --name srv --size 300G vg1

Том  под  /home  не  создаю, поскольку локальных пользователей на этом
серевере  будет  не  много,  и  задача  обеспечить их пространством не
стоит.

Форматируем полученные тома:

# mkfs -t ext3 /dev/vg1/usr
# mkfs -t ext3 /dev/vg1/var
# mkfs -t ext3 /dev/vg1/srv

Создаем будующую файловую струтуру

# mount /dev/mapper/root /mnt
# mkdir /mnt/usr
# mkdir /mnt/var
# mount /dev/vg1/usr /mnt/usr
# mount /dev/vg1/var /mnt/var
# mount -o bind /dev /mnt/dev

Копируем содержимое текущей установки:

# cp -avx / /mnt

Переключаемся в новый корень

Для этого нужно сначала подмонтировать в новый корень /dev:

# mount -o bind /dev /mnt/dev

Теперь chroot:

# chroot /mnt

Здесь нужно подмонтировать `/proc` и `/boot`:

# mount /proc
# mount /boot

Исправляем /etc/fstab

Строчку  `/dev/hde2  /  ext3  defaults,errors=remount-ro 0 1` удаляем,
вместо неё пишем:

/dev/mapper/root / ext3 defaults,errors=remount-ro 0 1
/dev/vg1/usr /usr ext3 defaults,errors=remount-ro 0 2
/dev/vg1/var /var ext3 defaults,errors=remount-ro 0 2
/dev/vg1/srv /srv ext3 defaults,errors=remount-ro 0 2

Настраиваем загрузчик

Для  подстраховки, на тот случай, если что-то пойдёт не так, обеспечим
возможность  загрузиться  с  нешифрованного  раздела и попробовать всё
исправить. Для этого нужно создать копию текущего initrd:

# cp /boot/initrd.img-2.6.18-4-686 /boot/initrd.img-2.6.18-4-686.cryptobak

и  добавить  в  `/boot/grub/menu.lst`  после  строчки  `### END DEBIAN
AUTOMAGIC KERNELS LIST`:

title           Debian unencrypted
root            (hd0,0)
kernel          /vmlinuz-2.6.18-4-686 root=/dev/hde2 ro
initrd          /initrd.img-2.6.18-4-686.cryptobak

В  том же `/boot/grub/menu.lst` находим строчку `# kopt=root=/dev/hde2
ro` и заменяем на:

# kopt=root=/dev/mapper/root ro

(знак комментария в начале строки НУЖЕН!)

Теперь делаем:

# update-grub
# update-initramfs -u -k all

Перезагрузка

Перегружаем систему. В процессе загрузки на экране появится запрос:

Enter LUKS password:

Так  как  у  нас  целых 3 шифрованных раздела, то и вопрос будет задан
трижды.

Разделы подкачки

Отключаем действующий swap:

# swapoff -a

Добавляем в /etc/crypttab:

swape           /dev/hde2               /dev/urandom    swap,cipher=aes-cbc-ess
iv:sha256
swapg           /dev/hdg2               /dev/urandom    swap,cipher=aes-cbc-ess
iv:sha256

И в /etc/fstab:

/dev/mapper/swape none swap sw 0 0
/dev/mapper/swapg none swap sw 0 0

Инициализируем свопы:

# mkswap /dev/hde2
# /etc/init.d/cryptdisks restart
# swapon -a

Здесь  действительно  нужно в начале сделать mkswap, иначе `cryptdisks
restart`  откажется  создавать  шифрованный swap, мотивируя тем, что в
разделе присутствует файловая система (это наш старый корень).

Зачистить

* удалить файл /boot/initrd.img-2.6.18-4-686.cryptobak

* удалить  из  /boot/grub/menu.lst всё после строчки `### END DEBIAN
AUTOMAGIC KERNELS LIST`

Недостатки решения

Так  как  у  нас  целых  3 шифрованных раздела, то при загрузке пароль
приходится  вводить  три  раза.  Меня  это  на  данный  момент  вполне
устраивает,  так  как конечная конфигурация этой системы будет такова,
что  ключи для шифрования будут прередаваться на этапе загрузки по SSH
(это будет описано отдельной статьёй). Как более простое решение, могу
посоветовать использовать для всех разделов, за исключением корневого,
ключевые  файлы,  которые  можно  положить  на  корневой зашифрованный
раздел.  Ключевые  файлы  нужно  будет  прописать  в `/etc/crypttab` и
перегенерировать initrd.

По  техническим  причинам  зашифровать абсолютно всё не представляется
возможным.  Нешифрованным  останется  раздел  `/boot`, в котором лежат
образы  ядра и initramfs-дисков. В такой ситуации возможна атака через
троян,  внедрённый  в  initramfs  (как  этому противостоять — тема для
отдельной  статьи).  Однако,  для  организации  такой  атаки,  в общем
случае, необходим физический доступ к серверу.

zp8497586rq















































Смотрите также:

Readers Comments (Комментариев нет)

Comments are closed.

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]