Можно отметить два основных способа организации шифрования данных в уже
существующей файловой системе Ext4, не требующие пересоздания раздела с
переносом данных из резервной копии. Первый способ заключается в использовании
встроенных в Ext4 возможностей по шифрованию отдельных каталогов, а второй в
использовании команды "cryptsetup reencrypt" для прозрачного переноса ФС на
новый шифрованный раздел LUKS. В любом случае создание полной резервной копии
перед выполнением предложенных манипуляций обязательно.
Первый способ наиболее простой и безопасный, но он ограничен использованием
отдельных шифрованных каталогов, в которые можно перенести конфиденциальные
данные, требующие защиты. Шифрование в Ext4 поддерживается при использовании
как минимум ядра Linux 4.1 и утилит 2fsprogs 1.43.
Выставляем в суперблоке раздела c ФС ext4 флаг поддержки шифрования (в нашем случае /dev/sda1):
sudo tune2fs -O encrypt /dev/sda1
Создаём каталог, в котором будут храниться зашифрованные данные текущего пользователя:
mkdir -p /secret/home/user
Генерируем случайную salt-последовательность для последующего шифрования и
сохраняем её в отдельный файл:
echo 0x`head -c 16 /dev/urandom | xxd -p` > /home/user/.crypt_salt
Создаём на базе данной salt-последовательности ключ для шифрования, указав для него пароль:
e4crypt add_key -S /home/user/.crypt_salt
Enter passphrase (echo disabled):
Added key with descriptor [f467134ca2c48c33]
Проверяем добавление ключа командой "keyctl show", которая поставляется в пакете keyutils.
Активируем шифрование для каталога /secret/home/user, указав выданный идентификатор ключа:
e4crypt set_policy f467134ca2c48c33 /secret/home/user
Если после перезагрузки попытаться обратится к каталогу /secret/home/user без
добавления ключа командой "e4crypt add_key", его содержимое будет показано в
зашифрованном виде. Для расшифровки каталога при каждой загрузке необходимо
настроить повторный вызов команды add_key для привязки ключа.
e4crypt add_key -S /home/user/.crypt_salt
Enter passphrase (echo disabled):
Added key with descriptor [f467134ca2c48c33]
Для просмотра привязанного к каталогу ключа можно использовать команду
e4crypt get_policy /secret/home/user
В случае необходимости шифрования всего содержимого можно использовать LUKS
cryptsetup для шифрования имеющегося раздела без потери данных.
Отмонтируем шифруемый раздел (при изменении корневого раздела нужно загрузиться
с отдельного live-дистрибутива), проверяем целостность ФС и уменьшаем размер ФС
для того, чтобы разместить заголвки LUKS на диске (в ФС должно быть достаточно
свободного места):
e2fsck -f /dev/sda4
resize2fs /dev/sda4 размер_меньше_текущего_на_32МБ
Шифруем содержимое имеющегося раздела без потери информации:
cryptsetup reencrypt --encrypt /dev/sda4 --reduce-device-size 32M
Открываем раздел:
cryptsetup open /dev/sdXY home
Увеличиваем размер ФС до свободной границы
resize2fs /dev/mapper/home
Монтируем раздел:
mount /dev/mapper/home /mnt/home
Смотрим UUID:
blkid /dev/mapper/home
Добавляем информацию о разделе в /etc/crypttab
home UUID=UUID_устройства_LUKS none
|