💾 Archived View for tilde.team › ~rami › redhat_luks.gmi captured on 2023-12-28 at 16:13:08. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-04-20)
-=-=-=-=-=-=-
רמי
SUBJECT: LUKS2: Создание и шифрование разделов
AUTHOR: Rami Rosenfeld
DATE: 12/09/22; upd. 10/04/2023
TIME: 15.00
LANG: ru, en
LICENSE: GNU FDL 1.3
TAGS: gnu, gnome, software, opensource, linux, system, man, manual, bash, privacy, security, rhel, centos, mate, xfce, lxde, spin, de, systemd, systemctl, selinux, firewalld, dnf, rpm, luks
Анализируемые операции состоят из двух частей:
- Раздел 1. Подготовка и форматирование носителя;
- Раздел 2. Создание шифрованного раздела.
Важно! Будьте особо осторожны - приводимые операции полностью уничтожат содержимое вашего носителя без возможности восстановления.
Важно! Не ошибитесь в именах носителей и разделов. Так, "/dev/sdb" и "/dev/sdb1" - это НЕ одно и то же! "/dev/sdb" - это общее имя физического носителя, а "/dev/sdb1" - первый раздел на нем.
Важно! Не перепутайте: в вашем конкретном случае носитель (винчестер HDD/SSD, USB-Flash, SD-карта и т.п.) может иметь другое имя, например sda, sdс. Уточняйте название командой "fdisk -l".
Важно! В случае с возникновением каких-то проблем в работе с fdisk, в частности - при появлении сообщения:
This disk is currently in use - repartitioning is probably a bad idea. It's recommended to umount all file systems, and swapoff all swap partitions on this disk. (...)
выполните предварительно, т.е. в самом начале:
fdisk --wipe auto /dev/sdb
Устройство не содержит стандартной таблицы разделов.
Создана новая метка DOS с идентификатором 0x7f182fe4.
и затем продолжите работу по приводимому алгоритму.
Примечание: Аналогичные операции легко осуществимы не только из консоли, но и при помощи более удобных способов (с применением GUI). Например, используя пакет "Диски" (GNOME-Disks) в GNOME или MATE.
(в рассматриваемом примере - USB-Flash 4 Gb; FAT32)
fdisk -l
(данные сокращены):
Диск /dev/sdb: 3,96 GiB, 4246732800 байт, 8294400 секторов
Disk model: USB DISK
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x1486eb19
Устр-во Загрузочный Начало Конец Секторы Размер Идентификатор Тип
/dev/sdb1 2048 8294399 8292352 4G c W95 FAT32 (LBA)
Операция производится до автопрерывания из-за появления ошибки о нехватке свободного места. Это действие необходимо, если используется носитель, хранивший ранее критичные данные, следы от которых следует уничтожить:
dd if=/dev/zero of=/dev/sdb1 bs=4K
dd: ошибка записи '/dev/sdb1': На устройстве не осталось свободного места
1036545+0 записей получено
1036544+0 записей отправлено
4245684224 байт (4,2 GB, 4,0 GiB) скопирован, 1276,59 s, 3,3 MB/s
Примечание: В зависимости от объема носителя - это длительная операция.
Примечание: Заполнение пространства нулями - ненадежная операция. Для повышения уровня безопасности применяйте команды shred и wipe (уничтожение файлов и заполнение носителями псевдослучайными данными в несколько проходов) - см. отдельное руководство в разделе Manuals.
После выполнения - отмонтируйте носитель sdb средствами системы. Извлеките его и снова вставьте в порт USB.
fdisk /dev/sdb
Добро пожаловать в fdisk (util-linux 2.37.4).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.
Команда (m для справки):
m
Справка:
DOS (MBR)
a переключение флага загрузки
b редактирование вложенной метки диска BSD
c переключение флага dos-совместимости
Общие
d удалить раздел
F показать свободное неразмеченное пространство
l список известных типов разделов
n добавление нового раздела
p вывести таблицу разделов
t изменение типа раздела
v проверка таблицы разделов
i вывести информацию о разделе
Разное
m вывод этого меню
u изменение единиц измерения экрана/содержимого
x дополнительная функциональность (только для экспертов)
Сценарий
I загрузить разметку из файла сценария sfdisk
O записать разметку в файл сценария sfdisk
Записать и выйти
w запись таблицы разделов на диск и выход
q выход без сохранения изменений
Создать новую метку
g создание новой пустой таблицы разделов GPT
G создание новой пустой таблицы разделов SGI (IRIX)
o создание новой пустой таблицы разделов DOS
s создание новой пустой таблицы разделов Sun
== Конец справки ==
Проверка таблицы разделов:
p
Удаление существующего раздела (если он существует):
d
Выбранный раздел 1
Раздел 1 был удален.
Создание нового раздела:
n
Тип раздела
p основной (0 primary, 0 extended, 4 free)
e расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p):
p
Номер раздела (1-4, default 1):
1
Первый сектор (2048-8294399, default 2048):
(для подтверждения нажмите ENTER)
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-8294399, default 8294399):
(для подтверждения нажмите ENTER)
Создан новый раздел 1 с типом 'Linux' и размером 4 GiB.
w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.
После записи изменений программа закончит работу.
fdisk -l /dev/sdb
mkfs.ext2 /dev/sdb1
mke2fs 1.46.3 (27-Jul-2021)
Creating filesystem with 1036544 4k blocks and 259584 inodes
Filesystem UUID: c6cb57ae-cb18-4ae1-b72e-196320540d4b
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
Операция выполняется на подготовленной флешке, отформатированной в ext2, шифруя носитель алгоритмом AES-256. Будет предложено дважды ввести новый пароль:
cryptsetup luksFormat --hash=sha512 --key-size=512 --cipher=aes-xts-plain64 --verify-passphrase /dev/sdb
ПРЕДУПРЕЖДЕНИЕ! Устройство /dev/sdb уже содержит подпись раздела «dos».
ПРЕДУПРЕЖДЕНИЕ! Данные на /dev/sdb будут перезаписаны без возможности восстановления.
Вы уверены? (введите «yes» заглавными буквами):
YES
Предупреждение при выборе слабого пароля (парольной фразы):
Ошибка при проверке стойкости пароля: Пароль должен содержать не менее 8 символов
Введите парольную фразу для /dev/sdb:
[Ввод парольной фразы]
Парольная фраза повторно:
[Ввод парольной фразы]
Примечание: Выбирайте только надежные пароли, например: maSW#_84h@liBq(%
cryptsetup luksOpen /dev/sdb USB
где "USB" - имя носителя в mapper.
Введите парольную фразу для /dev/sdb:
[Ввод парольной фразы]
mkfs.ext2 /dev/mapper/USB -L my
где "my" - метка носителя.
mke2fs 1.46.3 (27-Jul-2021)
Creating filesystem with 1032704 4k blocks and 258560 inodes
Filesystem UUID: ed1027ff-82ac-4a87-8509-5b459abf5bff
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
Примечание: Точка монтирования - каталог "USB" в домашнем каталоге пользователя с именем "user" - должен быть создан заранее:
mkdir /home/user/USB
Примечание: Обратите внимание, что в настоящее время права доступа к точке монтирования принадлежат администратору (root).
mount /dev/mapper/USB /home/user/USB
chown -R username:usergroup /home/user/USB
где username:usergroup - имя и группа текущего пользователя (не root'a).
Примечание: В RHEL, Fedora, CentOS (если непривилегированный пользователь - единственный в системе; его UID - 1000) лучше применить такую команду:
chown -R 1000:1000 /home/user/USB
где 1000 и 1000 - уникальные идентификаторы пользователя и его группы по умолчанию.
chmod -R 700 /home/user/USB
Криптоконтейнеры и крипторазделы LUKS имеют сразу несколько пустых "слотов" (ячеек) для хранения разных парольных фраз. Таким образом, для созданного раздела LUKS можно добавить другие пароли.
Добавление новой (второй, третьей и т.п.) парольной фразы в пустой слот. Сначала будет запрошен текущая, далее необходимо ввести и подтвердить новую:
cryptsetup luksAddKey /dev/sdb
Введите любую существующую парольную фразу:
[Ввод ПЕРВОЙ парольной фразы]
Введите вторую парольную фразу для слота ключа:
[Ввод НОВОЙ - ВТОРОЙ! - парольной фразы]
Парольная фраза повторно:
[Ввод НОВОЙ - ВТОРОЙ! - парольной фразы]
Удаление дополнительной парольной фразы:
Первоначальный поиск идентификатора ключа:
cryptsetup luksDump /dev/sdb
(информация сокращена)
LUKS header information
Version: 2
Epoch: 4
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 75dfcd79-c723-4c32-8456-90586c1641cd
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
1: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
Удаление ключа из слота 1 (0 - первоначальный, т.е. основной слот):
cryptsetup luksKillSlot /dev/sdb 1
Введите любую оставшуюся парольную фразу:
[Ввод парольной фразы слота 0, т.е. ПЕРВОЙ парольной фразы или любой другой, кроме "1"]
Важно! Команда luksDelKey является устаревшей. Она заменена на luksKillSlot.
cryptsetup luksErase dev/sdb
Важно! Эта операция удалит все существующие парольные фразы из всех слотов. Она необратима, информация восстановлению не подлежит! Парольная фраза при выполнении этой команды НЕ(!) запрашивается!
umount /dev/mapper/USB
Возможно использовать (вместо парольной фразы) ключевой произвольный файл, вынесенный в д��угое место или на другой носитель. Вначале при помощи псевдогенератора случайных чисел urandom создается ключевой файл (имя и месторасположение выбираются пользователем):
dd if=/dev/urandom of=/home/user/my_secret.key bs=512 count=4
4+0 записей получено
4+0 записей отправлено
2048 байт (2,0 kB, 2,0 KiB) скопирован, 0,00214979 s, 953 kB/s
Важно! Далее выполните все подготовительные команды, связанные с подготовкой носителя, описанные выше.
Затем ключевой файл используется вместо пароля при создании LUKS-раздела:
cryptsetup luksFormat --hash=sha512 --key-size=512 --cipher=aes-xts-plain64 /dev/sdb /home/user/my_secret.key
Чтобы открыть такой раздел, выполните команду:
cryptsetup -d /home/user/my_secret.key luksOpen /dev/sdb USB
Подробнее см.:
man cryptsetup
Configuring LUKS: Linux Unified Key Setup
🄯 Rami Rosenfeld, 2022-2023. GNU FDL 1.3.