Шифрование накопителя или раздела утилитой cryptsetup (LUKS) в Linux
В операционных системах Linux можно зашифровать отдельный раздел на диске, полностью накопитель SSD/HDD или USB/SD флешку использую стандарт шифрования LUKS. Управление шифрованными LUKS контейнерами (разделами) происходит через утилиту cryptsetup. Для расшифровки раздела или накопителя шифрованного LUKS можно использовать до 8 разных паролей паролей или ключей.
В отличие от шифрованных разделов через программу VeraCrypt, раздел LUKS создает сигнатуру в разметке диска или раздела. Операционные системы Linux будут понимать что это шифрованный накопитель или раздел, а Windows будет предлагать отформатировать накопитель. С одной стороны это минус что сразу понятно что на накопителе находятся зашифрованные данные, с другой стороны это удобство на дистрибутивах Linux. Вставил флешку, кликнул по ней, ввел пароль и можно пользоватся.
Еще одно существенное отличие, VeraCrypt может создать шифрованный контейнер внутри шифрованного раздела и создать шифрованные контейнера в виде файла, но для обычных задач в операционной системе Linux отличным решением будет LUKS.
LUKS позволяет полностью зашифровать всю операционную систему и загрузочный раздел, но в статье будет рассмотрено шифрование USB-флешки или другого внешнего накопителя и опционально отдельного раздела. Показывать буду на примере операционной систему Debian/Ubuntu, в других дистрибутивах работы с утилитой cryptsetup и LUKS контейнерами происходит аналогично.
Все действия выполняются от root пользователя или с его привилегиями через sudo.
su -
1. Установка cryptsetup для работы с LUKS
Для того что бы работать с шифрованием LUKS необходимо установить утилиту cryptsetup, если она не установлена в операционной системе.
Устанавливаем cryptsetup
apt install cryptsetup
Вместе с cryptsetup будут установлены все необходимые модули и утилиты.
2. Определение накопителя в системе
Вставляем USB-флешку в компьютер.
Выводим список всех накопителей в системе Linux
fdisk -l
В моем случаи /dev/sda необходимый USB накопитель. Вместо всего устройства, можно выбрать раздел для шифрования, например /dev/sda1 или предварительно его создать на накопителе. Также можно создать два раздела, один с файловой системой FAT32 чтобы определялся в Windows и второй раздел для LUKS который будет виден в Linux.
Если система работает на NVME SSD и нет SATA устройств, то единственная подключённая флешка будет иметь путь /dev/sda
Внимательно запоминай путь необходимого устройство или раздела, все данные на нем будут безвозвратно удалены в следующих шагах статьи. И если ошибится, то можно удалить безвозвратно данные системного раздела или другого накопителя.
3. Очистка данных с USB-флешки
Перед шифрованием рекомендуется перезаписать все ячейки памяти на флешки, чтобы предотвратить возможность получения доступа к данным которые были на флешке. Простое удаление файлов с флешки только убирает упоминание о файлах в разметке файловой системы, и при помощи специальных утилит можно восстановить данные обратно пока они не были перезаписаны. Если важных данных на флешки не было, этот раздел статьи можно пропустить.
Заполняем всю флешку нулями
dd if=/dev/zero of=/dev/sda status=progress
где /dev/sda — USB-флешка которую необходимо очистить или раздел.
Если оставить накопитель забитым нулями, то будет возможно определить объем зашифрованной информации.
Перезаписываем всю флешку случайными данными
dd if=/dev/random of=/dev/sda status=progress
где /dev/sda — USB-флешка которую необходимо очистить или раздел.
Двух проходов достаточно чтобы все данные были стерты с накопителя.
4. Создание шифрованной USB-флешки
4.1. Разметка и шифрование накопителя
Необходимо разметить в формате LUKS всю флешку или отдельный раздел. На этом этапе будет запрошен пароль для созданного шифрованного LUKS контейнера или можно указать путь до ключа доступа. Доступ к шифрованного LUKS контейнеру через ключ в данной статье рассматриватся не будет.
Создаем LUKS контейнер с использованием пароля
cryptsetup luksFormat /dev/sda
где /dev/sda — USB-флешка или раздел.
После запуска будет выведено предупреждение This will overwrite data on /dev/sda irrevocably. Are you sure? (Type 'yes' in capital letters):. Оно означает что все данные будет удалены с выбранного устройства или раздела и чтобы продолжить, необходимо ввести YES заглавными буквами.
Вводим заглавными буквами YES, далее придумываем и вводим пароль два раза для шифрования.
USB-флешка была полностью занята шифрованным LUKS контейнером(разделом).
Во время создания шифрованного накопителя или раздела для luksFormat можно указать дополнительные параметры, но настоек по умолчанию достаточно для надежной защиты данных. Список доступных команд выводится командой:
cryptsetup --help
4.2. Создание файловой системы внутри LUKS
Открываем LUKS контейнер, для этого указываем путь до USB-флешки или раздела и придумываем имя для открытого устройства LUKS, например usbflash
cryptsetup open /dev/sda usbflash
В результате было создано расшифрованное устройство /dev/mapper/usbflash для шифрованного LUKS контейнера.
Создание файловой системы ext4
Создаем файловую систему ext4
mkfs.ext4 -m 0 /dev/mapper/usbflash
где /dev/mapper/usbflash — расшифрованное LUKS устройство, параметр -m 0 указывает что не резервировать место для root пользователя.
Файловая система ext4 успешно создана внутри LUKS. Так как она была создана от root пользователя, то доступ на запись получить только root-пользователь. Можно изменить владельца или настроить права доступа 777, чтобы иметь возможность записывать файлы на любом компьютере от не суперпользователя. Вместо ext4 можно использовать любую файловую систему и самое удобное решение чтобы пользоватся с любых компьютеров и от любых пользователей это использовать FAT32 или exFAT.
Создание файловой системы FAT32
Создаем файловую систему FAT32
mkfs.fat -v -F 32 /dev/mapper/usbflash
где /dev/mapper/usbflash — расшифрованное LUKS устройство, параметр -F 32 указывает что будет создана файловая система FAT32.
Файловая система FAT32 успешно создана внутри LUKS.
Закрытие LUKS контейнера
Закрываем расшифрованное LUKS устройство
cryptsetup close usbflash
Закрывать устройство необязательно и можно сразу монтировать командой mount, но я закрыл чтобы не было путаницы в следующем шаге и была возможность подключатся средствами графической рабочей среды.
5. Открытие шифрованной USB-флешки
5.1. Монтирование вручную через консоль
Создаем каталог для монтирования с правами 755
mkdir -m 0755 -p /mnt/encrypted/
Открываем LUKS контейнер с указанием имени usbflash для создания расшифрованного устройства /dev/mapper/usbflash
cryptsetup open /dev/sda usbflash
где /dev/sda — USB-флешка или раздел шифрованный LUKS, usbflash — имя для расшифрованного LUKS устройства.
Вводим пароль и будет создано расшифрованное устройство /dev/mapper/usbflash, которое необходимо будет смонтировать.
Монтируем LUKS устройство
mount /dev/mapper/usbflash /mnt/encrypted/
где /dev/mapper/usbflash — расшифрованное LUKS устройство, /mnt/encrypted/ — каталог монтирования.
Каталог /mnt/encrypted/ доступен для записи только для root так как он создан от него с правами 755. Выполняем необходимые действия с файлами внутри флешки и после завершения работы с USB-флешкой выполняем действия в обратной последовательности.
Размонтируем точку монтирования
umount /mnt/encrypted/
Закрываем LUKS устройство
cryptsetup close usbflash
Удаляем каталог монтирования, если это необходимо
rm -r /mnt/encrypted/
Извлекаем флешку с USB порта компьютера.
5.2. Открытие через графический интерфейс
В большинстве сред рабочего стола (KDE, Xfce, GNOME и другие) достаточно подключить флешку к компьютеру и на рабочем столе появится ярлык для открытия шифрованного устройства.
Подключаем флешку к компьютеру, нажимаем на ярлык шифрованного внешнего устройства на рабочем столе и вводим пароль от зашифрованной флешки
Шифрованная USB-флешка успешно открыта.
Единственная разница в сравнении с нешифрованным накопителем в том что при открытии шифрованного накопителя необходимо будет ввести пароль доступа к нему. Дальнейшая работа с внешним накопителем происходит аналогично нешифрованному накопителю.
6. Резервная копия заголовка LUKS контейнера
Если случайно отформатировать быстрым шифрование накопитель в операционной систему Windows (винда будет всегда предлагать отформатировать, так как не понимает LUKS формат), то возможно будет восстановить шифрованные данные, так как быстрое шифрование удаляет только информацию о файловой системе и сигнатуре диска. В этом месте как раз находятся данные заголовка LUKS контейнера, такие как, сигнатура LUKS, тип шифрование и его параметры, пароли и ключи доступа для расшифровки.
Если после форматирования на флешку были скинуты какие-то данные, то восстановить LUKS контейнер будет возможно, но часть зашифрованных данных будет повреждена.
Резервная копия заголовка LUKS контейнера поможет восставить данные, если было повреждение каких-то секторов накопителя в месте заголовка.
Создаем резервную копию заголовка LUKS
cryptsetup --header-backup-file=/home/user/Documents/usb-flash-2GB.backup luksHeaderBackup /dev/sda
где /home/user/Documents/usb-flash-2GB.backup путь до файла в которых будет создана резервная копия заголовка, /dev/sda — USB-флешка или раздел шифрованный LUKS.
Теперь для эксперимента можно скинуть файл и отформатировать флешку в Windows или Linux.
Если шифрованный накопитель или раздел не получается открывать или показывается что пароль не верный, хотя он точно указывается корректно, необходимо попробовать восстановить заголовок LUKS из резервной копии.
Восстанавливаем из резервной копии заголовок LUKS
cryptsetup --header-backup-file=/home/user/Documents/usb-flash-2GB.backup luksHeaderRestore /dev/sda
где /home/user/Documents/usb-flash-2GB.backup путь до файла в котором находится резервная копия заголовка, /dev/sda — USB-флешка или раздел шифрованный LUKS.
Переподключаем накопитель к компьютеру и открываем его вводя пароль. Проверяем что все открылось и повреждённых данных нет.
Сравниваем хеш-сумму файла скинутого в качестве эксперимента при помощи утилиты sha256sum или аналогичных на шифрованной флешки и в месте откуда он был скинут. Значение хеш-сумму файлов должны быть идентичные.
7. Изменение пароля доступа
Изменение пароля происходить очень быстро, так как изменяется ключ в слоте доступа, а не все зашифрованные данные. Все зашифрованные данные при помощи LUKS доступны только мастер ключу, а при помощи пароля происходит доступ к самому мастер ключу.
Изменяем пароль к шифрованному LUKS контейнеру
cryptsetup luksChangeKey /dev/sda
где /dev/sda — USB-флешка или раздел шифрованный LUKS.
Вводим старый пароль, затем вводим два раза новый пароль.
Пароль был успешно обновлен.