Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Шифрование дисков в Linux реализуется с помощью подсистемы dm-crypt Crypto API (встроено в ядро начиная с версии 2.6). Подсистема dm-crypt работает благодаря модулю ядра, который отображает шифрованный диск в виртуальное устройство. На вид оно ничем не отличается от обычного блочного устройства хранения данных. Для управления ключами шифрования используется раздел LUKS (Linux Unified Key Setup). Формат LUKS позволяет использовать до восьми ключей шифрования для одного раздела.
Читай также: «Полнодисковое шифрование с LUKS2» и «Бэкдор для LUKS».
Раздел LUKS имеет следующий формат.
Он начинается с заголовка phdr
, далее за ним следуют слоты с ключевыми данными (KM1, KM2, ..., KM8). За ключевыми данными располагаются данные, шифрованные мастер‑ключом.
Заголовок phdr
хранит информацию о протоколе и режиме шифрования, длину ключей, идентификатор UUID и контрольную сумму мастер‑ключа.
В LUKS для одного зашифрованного раздела зарезервировано восемь слотов, в каждом из которых может храниться отдельный ключ. Любой из восьми ключей может быть использован для расшифровки раздела.
Заголовок и слоты ключей можно хранить на другом физическом носителе, отдельно от зашифрованных данных, тем самым реализуя многофакторную защиту. Но при утрате заголовка или слотов получить доступ к зашифрованным данным становится невозможно.
Для управления шифрованием дисков используется утилита cryptsetup.
С помощью этой утилиты возможно:
Для работы cryptsetup
требуются права суперпользователя и пароль шифрования.
Переходим к практике! Шифровать мы будем только рутовый раздел. Есть, конечно, экзотические кейсы, когда, помимо раздела root
, шифруется еще и раздел boot
, но такая конфигурация поддерживается не всеми загрузчиками и не считается стандартной и рекомендованной. Мы же вообще не будем использовать загрузчик, так что оставляем boot
в покое и шифруем все остальное.
Начнем собирать нашу систему, загрузившись с установочного диска.
Для начала разметим диск следующим образом: sda1
для /
, sda2
для /
. Схему разделов выбираем GPT.
$ parted /dev/sda mklabel gpt mkpart primary fat32 1MiB 501MiB
$ parted /dev/sda set 1 esp on
$ parted /dev/sda mkpart primary btrfs 501MiB 100%
Далее создадим наш LUKS на sda2.
$ cryptsetup luksFormat /dev/sda2
WARNING!========
This will overwrite data on /dev/sda2 irrevocably.
Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sda2:
Verify passphrase:
cryptsetup luksFormat /dev/sda2 18.16s user 1.88s system 80% cpu 24.742 total
Взглянем теперь на LUKS.
$ cryptsetup luksDump /dev/sda2
LUKS header information
Version:
2
Epoch:
3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID:
e04b5b87-6bfc-4f73-83b0-36f91d52f141
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: 7
Memory:
483194
Threads:
2
Salt:
a8 d7 82 ce 89 c8 0f d6 29 18 83 e5 5d 9d a7 f1
a2 6d 66 81 70 db c4 82 cc fb ae 81 4c 7f ed 0c
AF stripes: 4000
AF hash:
sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash:
sha256
Iterations: 149967
Salt:
87 ac 6f 61 75 fb 91 14 63 5d ca 5d 1c 25 ef 42
7b af 51 63 34 eb 26 d5 d7 be 7a 78 7b 2a 25 f1
Digest:
da e7 fd 26 59 85 5d 5e 34 79 2a fa 20 95 f1 83
13 10 0d 0e a3 58 a6 0e 33 b0 f0 73 e8 0a a1 1e
Видно, что мы задействовали один из восьми доступных слотов с ключами — доступ к нему ограничен паролем.
Алгоритм шифрования по умолчанию (aes-xts-plain64
) нас устроит. Перечень всех поддерживаемых алгоритмов зависит от ядра (загляни в /
). Можно протестировать работу с ними.
$ cryptsetup benchmark
#
PBKDF2-sha1
1817289 iterations per second for 256-bit key
PBKDF2-sha256
2302032 iterations per second for 256-bit key
PBKDF2-sha512
1646116 iterations per second for 256-bit key
PBKDF2-ripemd160 903944 iterations per second for 256-bit key
PBKDF2-whirlpool 681778 iterations per second for 256-bit key
argon2i
N/A
argon2id
N/A#
aes-cbc
128b
1126.9 MiB/s
2966.7 MiB/s
serpent-cbc
128b
98.6 MiB/s
736.0 MiB/s
twofish-cbc
128b
226.0 MiB/s
404.9 MiB/s
aes-cbc
256b
868.5 MiB/s
2594.2 MiB/s
serpent-cbc
256b
107.9 MiB/s
779.9 MiB/s
twofish-cbc
256b
241.6 MiB/s
433.4 MiB/s
aes-xts
256b
3152.7 MiB/s
3146.5 MiB/s
serpent-xts
256b
676.5 MiB/s
665.9 MiB/s
twofish-xts
256b
400.6 MiB/s
410.4 MiB/s
aes-xts
512b
2614.9 MiB/s
2600.2 MiB/s
serpent-xts
512b
687.1 MiB/s
711.3 MiB/s
twofish-xts
512b
413.0 MiB/s
417.2 MiB/s
cryptsetup benchmark 9.54s user 23.98s system 107% cpu 31.226 total
Откроем раздел.
$ cryptsetup open /dev/sda2 cryptroot
Enter passphrase for /dev/sda2:
После этих манипуляций у нас в системе стал доступен новый раздел cryptroot
.
$ lsblk /dev/sda
NAME
MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda
8:0
0
8G 0 disk├─sda1
└─sda2
└─cryptroot
Создадим на разделах файловые системы.
$ mkfs.btrfs -f -L "archroot"/dev/mapper/cryptroot
Для продолжения установки примонтируем наши разделы.
$ btrfs subvolume create /mnt/@root
$ btrfs subvolume create /mnt/@home
$ umount /mnt
$ mount /dev/mapper/cryptroot /mnt -o subvol=@root,ssd,noatime,space_cache,compress=zstd
$ mkdir/mnt/home
$ mount /dev/mapper/cryptroot /mnt/home -o subvol=@home,ssd,noatime,space_cache,compress=zstd
$ mkdir/mnt/boot
$ mount /dev/sda1 /mnt/boot
Заглядывая одним глазом в вики, устанавливаем систему обычным образом.
Не забудем включить хук encrypt
при создании initramfs
.
HOOKS=(base udev autodetect keyboard keymap modconf block encrypt filesystems)$ mkinitcpio -plinux
Финальный этап — настройка UEFI для загрузки нашего ядра. Напоминаю, что мы обойдемся без GRUB и будем загружать ядро напрямую, используя фичу EFISTUB.
Добавляем запись в UEFI.
--create --bootnum=0000 --label "Arch Linux" --disk/dev/sda --part 1 --loader/vmlinuz-linux --unicode 'cryptdevice=/dev/sda2:cryptroot root=/dev/mapper/cryptroot rootflags=subvol=@root rw initrd=initramfs-linux.img' --verbose
Особое внимание обрати на параметры ядра! Без них система просто не сможет найти шифрованный раздел.
Перезагружаемся и убеждаемся, что все работает, как мы хотели: на этапе загрузки требуется ввод пароля для расшифрования раздела.
Хотелось бы не вводить пароль при загрузке каждый раз. Для этого нужно настроить авторазблокировку LUKS с помощью чипа TPM.
|
|