Использовать шифрование данных залог того что ваши данные не попадут в руки кому попало. В этой статье расскажу как производить шифрование диска или раздела в ОС Linux используется модуль ядра dm-crypt LUKS.
Содержание:
Введение
Чтобы выполнить шифрование диска в системе Linux используется модуль ядра dm-crypt. Этот модуль позволяет создавать в каталоге /dev/mapper виртуальное блочное устройство с возможностью его шифрования. Фактически все данные лежат на зашифрованном физическом разделе. Данные на лету шифруются и записываются на диск, при чтении с виртуального устройства, выполняется обратная операция — данные расшифровываются с физического диска и передаются в открытом виде через виртуальный диск пользователю. Обычно для шифрования используется протокол шифрования AES, потому что под него оптимизированы большинство современных процессоров.
Важно заметить, что вы можете шифровать не только разделы и диски, но и обычные файлы, создав в них файловую систему и подключив как loop устройство.
Для работы с LUKS и модулем dm-crypt используется утилита Cryptsetup.
Создание шифрованного устройства
Общая схема работы с шифрованным устройством следующая:
- Определяется устройство для шифрования;
- Создается шифрованный раздел;
- Производится форматирование раздела в необходимую файловую систему;
- Монтирование раздела в систему.
Установка CRYPTSETUP
Выберите свою команду исходя из своей системы и установите необходимую утилиту:
apt install cryptsetup dnf install cryptsetup
Синтаксис запуска команды такой:
$ cryptsetup опции операция параметры_операции
Основные операции, которые можно сделать используя утилиту:
-
luksFormat — создать зашифрованный раздел luks linux;
-
luksOpen — подключить виртуальное устройство (нужен ключ);
-
luksClose — закрыть виртуальное устройство luks linux;
-
luksAddKey — добавить ключ шифрования;
-
luksRemoveKey — удалить ключ шифрования;
-
luksUUID — показать UUID раздела;
-
luksDump — создать резервную копию заголовков LUKS.
cryptsetup -y -v luksFormat /dev/sdb = вывод команды = ПРЕДУПРЕЖДЕНИЕ: Устройство /dev/sdb уже содержит подпись раздела «dos». WARNING! ======== Данные на /dev/sdb будут перезаписаны без возможности восстановления. Are you sure? (Type uppercase yes): YES - Внимание! Писать только заглавными буквами! Введите парольную фразу для /dev/sdb: ! пароль Парольная фраза повторно: ! повтор пароля Existing 'dos' partition signature on device /dev/sdb will be wiped. Создан слот ключа 0. Команда выполнена успешно.
В данном примере я использую парольную фразу так как именно такой подход мне кажется наиболее правильным. При желании можно использовать ключевой файл вместо парольной фразы.
Откроем созданный раздел с помощью модуля dm-crypt в /dev/mapper, для этого понадобится ввести пароль, с которым выполнялось создание раздела:
cryptsetup luksOpen /dev/sdb sdb_crypt
Посмотрим созданное виртуальное устройство:
ls -l /dev/mapper/sdb_crypt = вывод команды = lrwxrwxrwx 1 root root 7 дек 27 21:53 /dev/mapper/sdb_crypt -> ../dm-3
Посмотреть состояние устройства можно выполнив команду:
cryptsetup -v status sdb_crypt = вывод команды = /dev/mapper/sdb_crypt is active. type: LUKS2 cipher: aes-xts-plain64 keysize: 512 bits key location: keyring device: /dev/sdb sector size: 512 offset: 32768 sectors size: 625109680 sectors mode: read/write Команда выполнена успешно.
Рекомендую сделать резервную копию заголовков LUKS это может помочь при возможных в будущем проблем.
Делается резервная копия заголовка LUKS следующей командой:
cryptsetup luksDump /dev/sdb = вывод команды = LUKS header information Version: 2 Epoch: 3 Metadata area: 16384 [bytes] Keyslots area: 16744448 [bytes] UUID: cf501772-dd9b-4554-bccc-7a6739e72142 Label: (no label) Subsystem: (no subsystem) Flags: (no flags) Data segments: 0: crypt offset: 16777216 [bytes] length: (whole device) cipher: aes-xts-plain64 sector: 512 [bytes] Keyslots: 0: luks2 Key: 512 bits Priority: normal Cipher: aes-xts-plain64 Cipher key: 512 bits PBKDF: argon2i Time cost: 4 Memory: 903656 Threads: 4 Salt: 00 54 94 e7 r6 bb 00 ec 42 5a c9 81 7f d2 35 3d 07 06 af 27 ac 15 80 5f 4f 29 37 ee 72 4b ff b8 AF stripes: 4000 AF hash: sha256 Area offset:32768 [bytes] Area length:258048 [bytes] Digest ID: 0 Tokens: Digests: 0: pbkdf2 Hash: sha256 Iterations: 89043 Salt: ac 7b 53 43 4b b3 82 77 07 64 35 35 0b 2f fb c8 24 e0 ba 58 90 3d da 14 2f df 8e f0 fa a6 6a 76 Digest: 3f f1 07 4d 93 1b db ae 88 55 21 fa 9a ad a9 a2 ba 77 48 8b 84 41 aw 3c 0d 9d 5e 33 ae e0 af 44
Форматирование
Для надежности, чтобы стереть все данные, которые были в этом месте раньше, перезапишем нулями перед тем как будем создавать файловую систему:
dd if=/dev/zero of=/dev/mapper/sdb_crypt
Работа утилиты может занять несколько часов, чтобы иметь возможность наблюдать за процессом, используйте pv:
pv -tpreb /dev/zero | dd of=/dev/mapper/sdb_crypt bs=128M
В случае отсутствия утилиты pv её необходимо установить. Для систем на базе Debian необходимо выполнить команду # apt install pv
Отформатировать можно в любую необходимую файловую систему. В нашем случае отформатируем в ext4:
mkfs.ext4 /dev/mapper/sdb_crypt
Монтирование
Создадим место куда будем монтировать и подмонтируем созданную файловую систему:
mkdir /mnt/sdb_crypt mount /dev/mapper/sdb_crypt /mnt/sdb_crypt = При необходимости можно дать полные права всем = chmod 777 /mnt/sdb_crypt
Для проверки выполним команду которая покажет подмонтированые устройства в системе:
df -h
= вывод команды =
Файловая система Размер Использовано Дост Использовано% Cмонтировано в
devtmpfs 1,9G 0 1,9G 0% /dev
tmpfs 1,9G 0 1,9G 0% /dev/shm
tmpfs 1,9G 8,5M 1,9G 1% /run
tmpfs 1,9G 0 1,9G 0% /sys/fs/cgroup
/dev/mapper/rl-root 28G 6,0G 22G 22% /
/dev/sda1 1014M 334M 681M 33% /boot
tmpfs 374M 0 374M 0% /run/user/0
/dev/mapper/sdb_crypt 32G 24M 32G 0% /mnt/sdb_crypt
Для отключения необходимо отмонтировать файловую систему и шифрованный раздел:
umount /mnt/sdb_crypt cryptsetup luksClose sdb_crypt
Чтобы снова получить возможность работать с зашифрованным разделом необходимо открыть шифрованый раздел и подмонтировать файловую систему:
cryptsetup luksOpen /dev/sdb sdb_crypt mount /dev/mapper/sdb_crypt /mnt/sdb_crypt
Для удобства создадим два скрипта которые будут подключать и отключать шифрованное устройство.
Скрипт для подключения шифрованного устройства:
vim /root/start-sdb_crypt.sh = необходимый код #!/bin/bash cryptsetup luksOpen /dev/sdb sdb_crypt mount /dev/mapper/sdb_crypt /mnt/sdb_crypt
Скрипт для отключения шифрованного устройства:
vim /root/stop-sdb_crypt.sh = необходимый код = #!/bin/bash umount /mnt/sdb_crypt cryptsetup luksClose sdb_crypt
Cделаем скрипты исполнительными выполнив необходимую команду:
chmod +x /root/start-sdb_crypt.sh chmod +x /root/stop-sdb_crypt.sh
Обслуживание
Проверка файловой системы LUKS
После открытия раздела он воспринимается системой, как и все другие. Для проверки можно использовать утилиту fsck ( при условии что файловая система отмантирована ):
fsck -vy /dev/mapper/sdb_crypt
Изменение парольной фразы LUKS
Парольную фразу можно изменить или создать до восьми разных парольных фраз.
Перед началом обязательно сделайте резервную копию заголовков LUKS:
cryptsetup luksDump /dev/sdb
Команда для создания новой парольной фразы:
cryptsetup luksAddKey /dev/sdb = вывод команды = Введите любую существующую парольную фразу: ! вводим существующий пароль Введите новую парольную фразу для слота ключа: ! вводим новый пароль Парольная фраза повторно: ! повторяем новый пароль
Команда для удаления существующего пароля:
cryptsetup luksRemoveKey /dev/sdb
= вывод команды =
Введите удаляемую парольную фразу: ! вводим удаляемую парольную фразу
Заключение
Пользуюсь таким вариантом в работе уже давно и каких то проблем я не замечал.
Единственный минус заключается только в том что при перезагрузке системы приходится вручную подключать шифрованные разделы указывая пароль. Используя файл ключа шифрования можно настроить автоматическое монтирование шифрованного устройства, но тогда вообще пропадает смысл шифрования. Когда в системе с шифрованным устройством находится и сам ключ шифрования при правильных манипуляциях хороший специалист без проблем подключит шифрованный диск.
Решать в любом случае вам как защищать свои данные, но то что сейчас это надо делать обязательно актуально как никогда.