Чи можливо зашифрувати жорсткий диск ключовим файлом замість пароля?


14

Дивлячись на шифрування жорсткого диска. здається, що рішення переходить до dm-crypt з LUKS за допомогою пароля. Я працюю з декількома незалежними жорсткими дисками, встановленими в пул дисків для читання. У цьому випадку мені доведеться вводити пароль кілька разів.

Чи є спосіб, щоб я зашифрував жорсткі диски файлом ключів, можливо, поставте його на USB-накопичувач і просто підключіть його, коли потрібно ??

Відповіді:


11

Один з найкращих способів зробити це - використовувати смарт-карту з крипто-ключем на ній, щоб розблокувати ключі для ваших зашифрованих блокових пристроїв. Вам потрібно буде лише один раз ввести парольну фразу (її інструменти називають "PIN", але це справді парольна фраза), після чого вона буде кешована. Це має додаткову перевагу - захист зашифрованих даних чимось у вас є (сама смарт-карта, з якої приватний ключ не може бути вилучена) та щось, що ви знаєте (парольна фраза).

Форматуйте /etc/crypttabтак:

mapper-name /dev/disk/raw-device /var/lib/filename-containing-encrypted-key \
    luks,keyscript=/lib/cryptsetup/scripts/decrypt_opensc

У Debian та похідних інструменти initramfs-інструменти помітять сценарій клавіш та скопіюють усі необхідні інструменти та демон для автоматичного доступу до смарт-карти до initramfs.

Інформація про налаштування смарт-карти та створення (та шифрування) ключів міститься в /usr/share/doc/cryptsetup/README.opensc.gz.

Для цього можна використовувати Yubikey 4 або Yubikey NEO серед інших.

Примітки щодо впровадження : Ця функція має шорсткі краї і, мабуть, не виходить з коробки, тому YMMV. Востаннє, коли я успішно це досяг, мені довелося додати наступні хаки:

  • Вимкнути, systemdтому що катастрофічно намагається взяти на себе весь процес налаштування зашифрованих пристроїв, /etc/crypttabале нічого не знає, keyscriptщо призводить до великої НЕВІДОМИ. На щастя, у Debian ви все одно можете відмовитися systemd.
  • Встановіть цей верхній сценарій /etc/initramfs-tools/hooks/yubipinза допомогою фіксатора, оскільки вбудована функція не встановила достатньо підтримки, щоб зробити Yubikey зручним для використання в програмі initramfs. Можливо, вам доведеться це відрегулювати.

    #!/bin/sh
    
    PREREQ=cryptroot
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
    prereqs)
        prereqs
        exit 0
        ;;
    esac
    
    # /scripts/local-top/cryptopensc calls pcscd with the wrong path
    ln -s ../usr/sbin/pcscd ${DESTDIR}/sbin/pcscd
    mkdir -p "${DESTDIR}/usr/lib/x86_64-linux-gnu"
    # opensc-tool wants this dynamically, copy_exec doesn't know that
    cp -pL /usr/lib/x86_64-linux-gnu/libpcsclite.so.1 "${DESTDIR}/usr/lib/x86_64-linux-gnu/libpcsclite.so.1"
    mkdir -p "${DESTDIR}/lib/x86_64-linux-gnu"
    # without this, pcscd aborts with a pthread_cancel error
    cp -pL /lib/x86_64-linux-gnu/libgcc_s.so.1 "${DESTDIR}/lib/x86_64-linux-gnu/libgcc_s.so.1"
    # this gets copied as a dangling symlink, fix it
    rm "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
    cp -pL /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
    # pcscd needs this to open the reader once it has found it
    cp -pL /lib/x86_64-linux-gnu/libusb-1.0.so.0 "${DESTDIR}/lib/x86_64-linux-gnu/libusb-1.0.so.0"
    
  • Встановіть інший сценарій /etc/initramfs-tools/scripts/local-bottom/killpcscdдля очищення:

    #!/bin/sh
    
    set -e
    
    PREREQ=cryptopensc
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
        prereqs)
            prereqs
            exit 0
            ;;
    esac
    
    # because cryptopensc does not do it properly
    killall pcscd
    

1
Дуже приємний стимул використовувати смарт-карти та кудо для досягнення цього, але я б сказав, що метод розповсюдження, що включає зміну системи init та сторонніх хакерських скриптів, внесених до системних каталогів з нечитаними шляхами, не може розглядатися як відповідь на те, як використовувати запитання про файли ключів. Підкреслює неймовірне безладдя цього програмного забезпечення, тхо.
dbanet

@dbanet, я повністю згоден і сподіваюся, що хтось інший підійде і додасть відповідь, в якій описується, як це зробити іншим простішим способом. Тоді ОП може вибрати свого улюбленого.
Селада

dbanet та @Celada, саме мої думки. Це занадто складно, і навіть якщо мені вдасться це зробити, його фірмовий, тобто інший постачальник мав би інший метод. :(
Нітін

3

Можна просто зберігати пароль luks у файлі.

Я використовую це на своєму домашньому комп’ютері; Коренева файлова система працює на регулярному томі luks, який я розблоковую моєю парольною фразою під час завантаження. Додатковий накопичувач містить лукс-том із створеним паролем.

Цей додатковий том розблоковується файлом пароля, який знаходиться в зашифрованій кореневій файловій системі. Він автоматично розмикається під час завантаження, якщо розблокована коренева файлова система.

Моє /etc/crypttabвиглядає так:

crypt-root UUID=c5a2cf25-0aae-457e-874f-fca7ea3d5742 none luks
crypt-data UUID=96d79323-246d-49e0-9149-ec3a4cfc1c1e /etc/crypt-data.key luks

Третє поле - це ключ-файл, noneдля кореневої файлової системи, але /etc/crypt-data.keyдля файлової системи даних. /etc/crypt-data.keyмістить пароль luks:

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

Зауважте, що новий рядок або будь-який інший пробіл буде взято як частину пароля! Будьте обережні, щоб створити цей файл, не затягуючи новий рядок. Також переконайтеся, що він має чіткі дозволи:

-rw------- 1 root root 59 Sep 14 23:57 /etc/crypt-data.key

Ви повинні мати можливість дублювати такий підхід для кількох томів (або з різними паролями, або з одним загальним паролем, на ваш вибір).


Ви також можете згадати, як налаштувати LUKS на використання файлу ключів замість пароля?
Нітін

@Nithin Ключовий файл - третє поле в моєму прикладі /etc/crypttab. Я додав трохи зайвого тексту, щоб зробити це більш зрозумілим.
marcelm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.