http://www.debian.org/logos/openlogo-nd-50.png http://www.debian.org/Pics/debian.png

Translation(s): - Русский


Активная разработка страницы завершена


Если есть что добавить, то дополняйте разделы новой информацией. Наши опечатки и ошибки в статье можно править смело, нет необходимости сообщать об этом на почту, просьба соблюдать стилевое оформление этой страницы и использовать разделители разделов (серые линии различной толщины).



Шифрование данных в Debian


Многим кажется что шифровать свои данные не нужно. Однако в повседневной жизни мы часто сталкиваемся с такими ситуациями как "потерялась флешка" или же "ноутбук сдан в ремонт" итп. В случае если ваши данные зашифрованы, то можно за них совершенно не беспокоиться: никто не опубликует их в интернете, или не воспользуется каким-то другим способом.


Шифрование при помощи cryptsetup


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

# apt-get install cryptsetup


Стандартный синтаксис


Выберем раздел диска (или флешки) который мы хотим зашифровать, например это будет /dev/sda2. Введем команду:

# cryptsetup create sda2_crypt /dev/sda2

Данная команда создаст шифрованное подключение к нашему диску. В каталоге /dev/mapper появится новое устройство с запрошенным нами именем: /dev/mapper/sda2_crypt, обращаясь к которому мы используем шифрованный доступ к диску. В случае с LUKS имя будет /dev/mapper/sda2_crypt

Если на диске уже была файловая система и мы хотели бы сохранить данные на ней то необходимо выполнить их шифрование для последующего их использования:

# dd if=/dev/sda2 of=/dev/mapper/sda2_crypt

Если же создается новый диск на пустом разделе, то можно отформатировать его:

# mkfs.ext3 /dev/mapper/sda2_crypt

В последствии можно будет смонтировать этот диск куда угодно:

# mount /dev/mapper/sda2_crypt /path/to/mount/point

Проверить целостность данных (как обычно, лучше использовать только в размонтированном состоянии):

# fsck.ext3 /dev/mapper/sda2_crypt

И даже расшифровать обратно, если мы больше не хотим использовать шифрование:

# dd if=/dev/mapper/sda2_crypt of=/dev/sda2


LUKS синтаксис


Вышеуказанные действия можно выполнить в соответствии со стандартом LUKS

Инициализируем раздел:

cryptsetup luksFormat /dev/sda2

Подключаем в систему:

cryptsetup luksOpen /dev/sda2 sda2_crypt

Форматируем:

mkfs.ext4 -v -L DATA /dev/mapper/sda2_crypt

Монтируем:

mount /dev/mapper/sda2_crypt /mnt/data

Раздел можно вручную отключить о системы

cryptsetup luksClose sda2_crypt


Подключение при запуске


Для этой цели используется файл crypttab.

Для нашего диска пропишем в него следующую строку:

nano /etc/crypttab

# имя mapper  устройство   ключ    параметры/опции
# При стандартном синтаксисе
sda2_crypt    /dev/sda2    none    aes-cbc-plain:sha256
# и\или под стандарту LUKS
sda2_crypt    /dev/sda2    none    luks

По умолчанию используется шифрование по паролю введенному пользователем. Таким образом каждый раз когда Вы загружаете Ваш компьютер система будет спрашивать каждый раз у Вас пароль для подключения каждого зашифрованного раздела. Даже если в fstab эти разделы не прописаны.

Если хотим монтировать вручную, то добавляем опцию noauto в поле "параметры/опции".

Подключение шифрованного раздела вручную по данным из /etc/crypttab

cryptdisks_start msda2_crypt

И отключение с заранее отмонтированной фс.

cryptdisks_stop sda2_crypt

Для автоматического монтирования фс на подключённом зашифрованном разделе добавляем строку в /etc/fstab

/dev/mapper/sda2_crypt /mnt/data ext4 defaults 0 0


Работа с ключами в LUKS


Раздел LUKS поддерживает 8 различных ключей, каждый из которых помещается в свой слот.

Cмотрим список используемых ключей

cryptsetup luksDump /dev/sda2

В LUKS могут использоваться 2 вида ключей – ключевые фразы и файлы.

Можно добавить ключевую фразу

cryptsetup luksAddKey /dev/sda2

Можно добавить ключевой файл (2048 bit) и выставить права доступа к нему.

dd if=/dev/urandom of=/root/ext2.key bs=512 count=4
cryptsetup luksAddKey /dev/sda2 /root/ext2.key
chmod 400 /root/sda2.key

Далее следует подключить раздел в систему по ключу:

cryptsetup -d /root/sda2.key luksOpen /dev/sda2 sda2_crypt

Для подключения при запуске по ключу правим /etc/crypttab

nano /etc/crypttab

sda2_crypt    /dev/sda2    /root/sda2.key    luks

Можно удалить ключевую фразу или ключ из раздела

cryptsetup luksKillSlot /dev/sda2 1


Аварийное монтирование в "чужом" дистрибутиве


От проблем никто не застрахован и иногда нужно получить доступ к зашифрованному разделу из аварийного LiveCD диска.

Загружаемся, подключаем раздел в систему и монтируем фс:

cryptsetup luksOpen /dev/sda2 sda2_crypt
mount -t ext4 /dev/mapper/sda2_crypt /mnt/backup

После работы отмонтируем фс и отключим зашифрованный раздел от системы

umount /mnt/backup
cryptsetup luksClose sda2_crypt


Сообщения об ошибках при выключении


Если корневой раздел зашифрован, то при выключении будет выдаваться сообщение

stopping early crypto disks... failed

Это техническая ошибка. При выключении в первую очередь всегда демонтируется файловые системы и лишь потом происходит отключение раздела. В итоге получается что утилита cryptsetup находящаяся на корневом отмонтированном разделе уже недостуна для запуска, о чём нам INIT и сообщает. Без костылей такую проблему не решить, т.к. для этого нужно рассматривать варианты с переносом cryptsetup в RAM диск

Аналогичная ситуация складыватеся и при использовании программного RAID содержащего корневой раздел. 8)


Шифрование при помощи модуля loop-aes


Шифрование раздела винчестера, флешки с помощью пароля


В данном howto описан метод шифрования AES256, другие методы можно применять аналогично (заменив название метода на соответствующее). Нам понадобятся следующие пакеты:

# apt-get install loop-aes-utils loop-aes-modules-`uname -r`

Примечание: если Вы используете ядро для которого в репозитарии нет нужного loop-aes-modules, Вы можете установить модули следующими командами:

# apt-get install module-assistant loop-aes-source
# module-assistant a-i loop-aes

Начальный этап

На начальном этапе мы готовим диск к тому чтобы работать с ним, используя шифрование.

Выберем раздел диска (или флешки) который мы хотим зашифровать, например это будет /dev/sda2. Введем команду:

# losetup -e AES256 -T /dev/loop0 /dev/sda2

После выполнения данной команды, все обращения к девайсу /dev/loop0 будут шифроваться и в шифрованном виде перенаправляться в девайс /dev/sda2. Теперь мы имеем одновременно шифрованный и нешифрованный каналы к устройству хранения данных. Шифруются данные при помощи пароля который вы указали при выполнении losetup.

Теперь мы можем например отформатировать девайс:

# mkfs.ext3 /dev/loop0

Можем смонтировать его:

# mount /dev/loop0 /path/to/mount

можем отключить шифрование:

# losetup -d /dev/loop0

и самое главное, можем зашифровать раздел без потери данных:

# dd if=/dev/sda2 of=/dev/loop0

а так же расшифровать, если решаем что шифрование не наш метод:

# dd if=/dev/loop0 of=/dev/sda2

Ну и самое приятное, мы можем делать проверки файловой системы на целостность:

# fsck.ext3 /dev/loop0

Данная возможность доступна далеко не во всех методах шифрования разделов.


Повседневное использование


Если у Вас уже была запись о разделе /dev/sda2 в Вашем /etc/fstab, то Вам нужно просто добавить опции, а если не было то прописать примерно следующее:

/dev/sda2 /path/to/mount ext3 loop,encryption=AES256 0 0

Теперь при загрузке операционной системы у Вас будет запрошен пароль для монтирования.

Если Вы не хотите чтобы процесс загрузки прерывался запросом пароля, то можно добавить опции noauto,user в запись /etc/fstab:

/dev/sda2 /path/to/mount ext3 loop,encryption=AES256,noauto,user 0 0

Разумеется можно монтировать вручную (или из скрипта):

# mount /dev/sda2 /path/to/mount -o loop,encryption=AES256


Монтирование нескольких файловых систем


Иногда хочется зашифровать одновременно несколько разделов с данными, но так чтобы не вводить море паролей на каждый mount. Например у Вас есть флешка, которую вы таскаете из дома на работу, переносной винчестер и т.п. Или же просто несколько разделов/винчестеров.

Допустим мы имеем зашифрованный раздел /dev/sda2, который мы при каждой загрузке монтируем в каталог /mnt1. Появился новый винчестер /dev/sdb1 и мы хотим чтобы он автоматически монтировался в каталог mnt2 при монтировании первого. Можно конечно создать общую систему на чем-то вроде LVM, однако можно и более простым путем пойти:

прописываем в fstab примерно следующую строку:

/dev/sda2 /mnt1 ext3 noatime,exec,loop,encryption=AES256 0 0
/dev/sdb1 /mnt2 ext3 noatime,exec,loop,encryption=AES256,cleartextkey=/mnt1/key.txt 0 0

далее в зашифрованном разделе создаем файл /mnt1/key.txt, в который прописываем пароль, который будет использован для монтирования второго винчестера.

Система при загрузке монтирует точки в том же порядке, который описан в fstab, таким образом, если первый раздел не будет смонтирован, то ключ для монтирования второго раздела останется недоступным и второй раздел так же не будет смонтирован.

Пароль хранится в виде plain/text это конечно не очень красиво, но он хранится на зашифрованном разделе (который можно и отмонтировать). Можно вместо этого использовать gpg-ключ, однако много безопасности это не добавит (если уж смогут спереть ключ, то большой разницы какой этот ключ не будет), вариант шифрования с gpg-ключом описан в man losetup, здесь я лишь приведу пример записи в fstab:

/dev/sda2 /mnt1 ext3 noatime,exec,loop,encryption=AES256 0 0
/dev/sdb1 /mnt2 ext3 noatime,exec,loop,encryption=AES256,gpgkey=/mnt1/key.gpg 0 0


Примечания


Дополнительную информацию о поддерживаемых алгоритмах шифрования смотри в man losetup, там же можно посмотреть описание других опций программы losetup.

Если у Вас возникнут проблемы при установке модулей AES, то читайте документацию идущую с пакетом loop-aes-source.


GRUB и шифрованный корневой диск


При установке корневого раздела на зашифрованный диск GRUB может в главном меню показывать кракозябры. Это происходит из-за недоступности стандартного шрифта /usr/share/grub/unicode.pf2. Копируем шрифт

cp /usr/share/grub/unicode.pf2 /boot/grub/

Указываем настройку

nano /etc/default/grub

GRUB_FONT=/boot/grub/unicode.pf2

Применяем настройку:

update-grub