dm-crypt (Українська)/Swap encryption (Українська)
Залежно від вимог, можуть використовуватися різні методи для шифрування розділу swap, які описані нижче. Налаштування, при якому шифрування свопу повторно ініціалізується під час перезавантаження (з новим шифром), забезпечує більш високий захист даних, оскільки дозволяє уникнути чутливих фрагментів файлів, які, можливо, були досить давно записані у своп і збереглись без перезапису. Однак повторне шифрування свопу, як правило, також забороняє використання функції призупинення на диск.
Без підтримки функції призупинення на диск
У системах, де призупинення роботи на диск (сплячий режим) не є бажаною функцією, /etc/crypttab
можна налаштувати для розшифровки розділу підкачки випадковим паролем із простим dm-crypt під час завантаження. Випадковий пароль відкидається під час вимкнення, залишаючи позаду лише зашифровані, недоступні дані в пристрої обміну.
Щоб увімкнути цю функцію, просто розкоментуйте рядок, що починається з swap
, у /etc/crypttab
. Змініть параметр <device>
на ім’я вашого пристрою підкачки. Наприклад, це буде виглядати приблизно так:
/etc/crypttab
# <name> <device> <password> <options> swap /dev/sdX# /dev/urandom swap,cipher=aes-xts-plain64,size=256
Це відобразить /dev/sdX#
у /dev/mapper/swap
як розділ підкачки, який можна додати в /etc/fstab
як звичайний своп. Якщо у вас раніше був незашифрований розділ підкачки, не забудьте його відключити, або повторно використати його fstab запис, змінивши device на /dev/mapper/swap
. Опцій за замовчуванням має бути достатньо для більшості використань. Інші варіанти та пояснення кожного стовпця наведено у crypttab(5), а також point cryptsetup FAQ 2.3.
/dev/sda
, /dev/sdb
) може змінюватись при кожному завантаженні . Варіанти:
- Використовуйте шляхи
by-id
таby-path
. Однак вони обидва сприйнятливі до апаратних змін. Див. Persistent block device naming#by-id and by-path. - Використовуйте ім'я логічного тому LVM.
- Використовуйте метод, описаний у #UUID і LABEL. Мітки та UUIDS не можна використовувати безпосередньо через рекреацію та повторне шифрування пристрою підкачки при кожному завантаженні за допомогою
mkswap
, див. cryptsetup FAQ.
Щоб використовувати постійне іменування пристрою by-id
замість простого іменування ядра, спочатку визначте пристрій підкачки:
# find -L /dev/disk -samefile /dev/sdaX
/dev/disk/by-id/ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-partX /dev/disk/by-id/wwn-0x60015ee0000b237f-partX
Потім використовуйте як постійне посилання, наприклад для розділу /dev/sdX#
(якщо повертаються два результати, як зазначено вище, виберіть один із них):
/etc/crypttab
# <name> <device> <password> <options> swap /dev/disk/by-id/ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-partX /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
Зауважите, що після перезавантаження і активації зашифрованого розділу підкачки, запуск для нього swapon -s
показує довільний запис для відображення пристрою (наприклад, /dev/dm-1
), тоді як команда lsblk
показує crypt у стовпці FSTYPE
. Завдяки новому шифруванню при кожному завантаженні, UUID для /dev/mapper/swap
буде змінюватися кожного разу.
UUID і LABEL
Небезпечно використовувати crypttab розділ підкачки з простими іменами пристроїв ядра, такими як /dev/sdX#
або навіть /dev/disk/by-id/ata-SERIAL-partX
. Незначна зміна назв пристроїв або макета розділів та /etc/crypttab
побачить ваші цінні дані, які будуть відформатовані під час наступного завантаження. Те саме, якщо ви використовуєте PARTUUID, а потім вирішите використовувати цей розділ для чогось іншого, не видаляючи спочатку запис crypttab.
Надійніше визначити правильний розділ, надавши йому справжній UUID або LABEL. За замовчуванням це не працює, оскільки dm-crypt та mkswap
просто перезаписують будь-який вміст у цьому розділі, який також видаляє UUID та LABEL; однак можна вказати зміщення підкачки. Це дозволяє створити дуже маленьку, порожню, неправдиву файлову систему, яка не має жодної іншої мети, окрім забезпечення постійного UUID або LABEL для шифрування свопа.
Створіть filesystem з міткою на ваш вибір:
# mkfs.ext2 -L cryptswap /dev/sdX# 1M
Незвичний параметр після імені пристрою обмежує розмір файлової системи до 1 Мб, залишаючи за собою місце для зашифрованого свопу.
# blkid /dev/sdX#
/dev/sdX#: LABEL="cryptswap" UUID="b72c384e-bd3c-49aa-b7a7-a28ea81a2605" TYPE="ext2"
Завдяки цьому /dev/sdX#
тепер легко можна ідентифікувати за допомогою UUID або LABEL, незалежно від того, як в майбутньому може змінитися назва пристрою або навіть номер розділу. Залишились лише відредагувати записи /etc/crypttab
та /etc/fstab
:
/etc/crypttab
# <name> <device> <password> <options> swap LABEL=cryptswap /dev/urandom swap,offset=2048,cipher=aes-xts-plain64,size=512
Зверніть увагу на зміщення: це 2048 секторів по 512 байт, отже, 1 Мб. Таким чином зашифрований своп не вплине на LABEL/UUID файлової системи, вирівнювання даних також працює.
/etc/fstab
# <filesystem> <dir> <type> <options> <dump> <pass> /dev/mapper/swap none swap defaults 0 0
Використовуючи це налаштування, криптосвоп намагатиметься використовувати лише розділ із відповідною міткою, незалежно від імені пристрою. Якщо ви вирішите використовувати розділ для чогось іншого, відформатувавши його, мітка cryptswap також буде втрачена, тому кріптосвоп не перезапише його під час наступного завантаження.
Вимкнення режиму глибокого сну в робочих середовищах
Середовища робочого столу не можуть автоматично виявити, що розділ підкачки зашифрований випадковим ключем і не може використовуватися для призупинення на диск.
Xfce можна налаштувати на приховування своєї кнопки Hibernate, виконавши цю команду:
$ xfconf-query -c xfce4-session -np /shutdown/ShowHibernate -t bool -s false
З підтримкою призупинення на диск
Щоб мати змогу відновити роботу після призупинення роботи комп’ютера на диск (сплячого режиму), потрібно зберегти своп простір цілим. Отже, потрібно мати раніше існуючий розділ або файл підкачки LUKS, який можна зберігати на диску або вводити вручну під час запуску.
Наступні три методи є альтернативами налаштування зашифрованого своп з підтримкою призупинення на диск. Якщо ви застосовуєте будь-який із них, пам’ятайте, що критичні дані, які система замінює, можуть потенційно залишатися в свопі протягом тривалого періоду (тобто доки він не буде перезаписаний). Щоб зменшити цей ризик, розгляньте можливість встановлення системного завдання, яке повторно шифрує своп, наприклад кожного разу, коли система переходить у звичайне відключення, разом із вибраним методом.
LVM на LUKS
Якщо том підкачки знаходиться у групі томів, яка активується в initramfs, просто дотримуйтесь інструкцій у Power management/Suspend and hibernate#Hibernation.
Використання розділу підкачки
Щоб відновити роботу із зашифрованого розділу підкачки, зашифрований розділ потрібно розблокувати в initramfs.
- При використанні initramfs на основі busybox( це за замовчуванням) застосуйте виверт encrypt, дотримуйтесь інструкцій у #Виверт mkinitcpio.
- Коли ж використовуєте initramfs на основі systemd з mkinitcpio вивертом sd-encrypt, просто вкажіть додаткові параметри ядра
rd.luks
, щоб розблокувати розділ підкачки.
Виверт mkinitcpio
encrypt
, який може розблокувати лише один пристрій (FS#23182). З вивертом sd-encrypt
, може бути розблоковано кілька пристроїв, див. dm-crypt/System configuration#Using sd-encrypt hook.Якщо пристрій підкачки знаходиться на пристрої, відмінному від пристрою кореневої файлової системи, він не буде відкритий вивертом encrypt
, тобто відновлення повинно відбутися до того, як /etc/crypttab
може бути використаний, тому потрібно створити виверт у /etc/mkinitcpio.conf
, щоб відкрити своп пристрій LUKS перед відновленням.
Якщо ви хочете послуговуватись розділом, який зараз використовується системою, спочатку його потрібно відключити:
# swapoff /dev/<device>
Також не забудьте видалити будь-який рядок із /etc/crypttab
, що вказує на цей пристрій.
Якщо ви повторно використовуєте існуючий своп partition, і якщо розділ знаходиться в таблиці розділів GPT, вам потрібно буде використовувати gdisk, щоб встановити на ньому атрибут розділу 63 "не монтувати автоматично "partition attribute 63 "do not automount". Це не дозволить systemd-gpt-auto-generator виявити та ввімкнути розділ під час завантаження.
Наступна установка має недолік, оскільки при кожному завантаженні потрібно додатково вручну вставляти парольну фразу для розділу підкачки.
/boot
не зашифровано. Будь ласка, прочитайте про проблему, про яку повідомлено тут. Або скористайтеся зашифрованим gnupg файлом ключів відповідно до https://bbs.archlinux.org/viewtopic.php?id=120181
Щоб відформатувати зашифрований контейнер для розділу підкачки, створіть набір ключів для запам’ятовуваної користувачем парольної фрази.
# cryptsetup luksFormat /dev/<device>
Відкрийте розділ у /dev/mapper
:
# cryptsetup open /dev/<device> swapDevice
Створіть файлову систему підкачки всередині відображеного розділу:
# mkswap /dev/mapper/swapDevice
Тепер вам потрібно створити виверт, щоб відкрити підкачку під час завантаження. Ви можете встановити install та налаштувати пакет mkinitcpio-openswapAUR, або слідувати наступним інструкціям. Створіть файл хука, що містить команду відкриття вашого пристрою підкачки:
/etc/initcpio/hooks/openswap
run_hook () { cryptsetup open /dev/<device> swapDevice }
шляхом введення пароля під час завантаження або:
/etc/initcpio/hooks/openswap
run_hook () { ## Optional: To avoid race conditions x=0; while [ ! -b /dev/mapper/<root-device> ] && [ $x -le 10 ]; do x=$((x+1)) sleep .2 done ## End of optional mkdir crypto_key_device mount /dev/mapper/<root-device> crypto_key_device cryptsetup open --key-file crypto_key_device/<path-to-the-key> /dev/<device> swapDevice umount crypto_key_device }
шляхом завантаження файлу із зашифрованного кореневого пристрою.
На деяких комп’ютерах можуть виникати умови, що призводять до перегонів , коли mkinitcpio намагається встановити пристрій перед процесом дешифрування та завершенням переліку пристроїв. Коментований блок Optional затримає процес завантаження на 2 секунди, поки кореневий пристрій не буде готовий до монтування.
--allow-discards
повинна бути додана до рядка cryptsetup у виверті openswap вище. Див. Dm-crypt/Specialties#Discard/TRIM support for solid state drives (SSD) або SSD для отримання додаткової інформації про Discard/TRIM. Крім того, вам потрібно додати опцію монтування 'discard' до вашого запису fstab для пристрою підкачки.Потім створіть і відредагуйте файл налаштування виверта:
/etc/initcpio/install/openswap
build () { add_runscript } help () { cat<<HELPEOF This opens the swap encrypted partition /dev/<device> in /dev/mapper/swapDevice HELPEOF }
Додайте виверт openswap
в рядок HOOKS
в /etc/mkinitcpio.conf
, перед filesystem
, але після encrypt
. Не забудьте додати виверт resume
після openswap
.
HOOKS=(... encrypt openswap resume filesystems ...)
Перегенеруйте initramfs Regenerate the initramfs.
Додайте відображений розділ до /etc/fstab
, доповнивши таким рядком:
/dev/mapper/swapDevice swap swap defaults 0 0
Налаштуйте свою систему на відновлення з /dev/mapper/swapDevice
. Наприклад, якщо ви використовуєте GRUB з підтримкою ядром сплячого режиму, додайте параметр ядра resume=/dev/mapper/swapDevice
до GRUB, додавши його до GRUB_CMDLINE_LINUX_DEFAULT
змінна в /etc/default/grub
. Рядок grub.cfg для ядра із зашифрованими кореневим та своп розділами може виглядати так:
kernel /vmlinuz-linux cryptdevice=/dev/sda2:rootDevice root=/dev/mapper/rootDevice resume=/dev/mapper/swapDevice ro
Під час завантаження виверт openswap
відкриє розділ підкачки, щоб відновлення ядра могло використовувати його. Якщо ви використовуєте спеціальні виверти для виходу з режиму глибокого сну, переконайтеся, що вони розміщені після openswap
у масиві HOOKS
. Зверніть увагу, що через відкриття розділу підкачки у initrd не має потреби вносити запис про swapDevice у /etc/crypttab
в цьому випадку.
Використання файла підкачки
Файл свопу може бути використаний для резервування місця підкачки в межах існуючого розділу, а також може бути встановлений всередині зашифрованого розділу блочного пристрою.
Дотримуйтесь інструкцій щодо створення файлів підкачки у Swap#Swap file та налаштуйте сплячий режим відповідно до Power management/Suspend and hibernate#Hibernation into swap file.
resume
повинен вказувати на розблокований/відображений пристрій, що містить файлову систему з файлом підкачки.Відомі проблеми
-
Stopped (with error) /dev/dm-1
in logs. See systemd issue 1620.