Jump to content

# dm-crypt (Українська)/Swap encryption (Українська)

From ArchWiki
< Dm-crypt (Українська)

Залежно від вимог, можуть використовуватися різні методи для шифрування розділу 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.

Примітка Налаштування розділу підкачки іноді може бути невдалим, див. systemd issue 10179.

Щоб використовувати постійне іменування пристрою `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` буде змінюватися кожного разу.

Примітка Якщо розділ, вибраний для підкачки, раніше був розділом LUKS, crypttab не буде перезаписувати розділ, щоб створити розділ підкачки. Це захід безпеки для запобігання втраті даних від випадкової помилкової ідентифікації розділу підкачки в crypttab. Для того, щоб використовувати такий розділ, видаліть один раз заголовок LUKS LUKS header must be overwritten.

### 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 для шифрування свопа.

Створіть файлову систему з міткою на ваш вибір:

    # 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 systemd-cryptsetup-generator.

Якщо пристрій підкачки знаходиться на пристрої, відмінному від пристрою кореневої файлової системи, він не буде відкритий вивертом `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
    }

Попередження Монтування файлової системи є небезпечною та руйнівною дією. Файл ключів не слід читати з файлової системи, яка була змонтована під час призупинення роботи.

This article or section needs expansion.

Reason: Додайте інструкції, які не призведуть до втрати даних. (Discuss in Talk:Dm-crypt (Українська)/Swap encryption (Українська))

шляхом введення пароля під час завантаження або:

    /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 секунди, поки кореневий пристрій не буде готовий до монтування.

Примітка Якщо підкачка знаходиться на твердотільному диску (SSD), а Discard/TRIM бажана, опція `--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#Acquire swap file offset.

Примітка Під час відновлення з файлу підкачки параметр `resume` повинен вказувати на розблокований/відображений пристрій, що містить файлову систему з файлом підкачки.

## Відомі проблеми

- `Stopped (with error) /dev/dm-1` in logs. See systemd issue 1620.

Category:

- Data-at-rest encryption (Українська)

Hidden category:

- Pages or sections flagged with Template:Expansion

dm-crypt (Українська)/Swap encryption (Українська)
Add topic