Иногда возникает необходимость создания зашифрованного диска. Мне известно два решения этой проблемы - это cryptsetup и truecrypt. Truecrypt немного проще в освоении, имеет gui-конфигуратор для хомячков, но, к сожалению, не имеет полноценной поддержки криптомодулей ядра Linux. Cryptsetup является более штатным средством для многих дистрибутивов, поэтому речь в статье пойдёт именно о нём.
Для начала убедитесь, что ядро предоставляет все средства для организации криптодисков. Минимально необходимый набор:
# zcat /proc/config.gz | grep -E '^CONFIG_(MD|DM_CRYPT|CRYPTO_SHA256|CRYPTO_AES|CRYPTO_CBC)' CONFIG_MD=y CONFIG_DM_CRYPT=m CONFIG_CRYPTO_CBC=m CONFIG_CRYPTO_SHA256=m CONFIG_CRYPTO_AES=y CONFIG_CRYPTO_AES_X86_64=m CONFIG_CRYPTO_AES_NI_INTEL=m
Доступные алгоритмы шифрования в ядре можно посмотреть так:
# cat /proc/crypto | grep name
Ядро может предоставлять возможность работы с криптомодулями юзерспейсным утилитам. За это отвечают следующие модули:
# zcat /proc/config.gz | grep -E '^CONFIG_CRYPTO_USER' CONFIG_CRYPTO_USER=m CONFIG_CRYPTO_USER_API=m CONFIG_CRYPTO_USER_API_HASH=m CONFIG_CRYPTO_USER_API_SKCIPHER=m
Нужно собрать cryptsetup:
sys-fs/cryptsetup-1.6.1 USE="kernel nls udev -gcrypt -nettle -openssl -python -reencrypt (-selinux) -static -static-libs -urandom"
У cryptsetup имеется 4 взаимоисключающих флага. Для работы cryptsetup непосредственно с криптомодулями ядра нужно выбрать флаг kernel:
# echo "sys-fs/cryptsetup -gcrypt kernel -nettle -openssl" >> /etc/portage/package.use
С помощью утилиты gdisk/fdisk создайте раздел в любом удобном для вас месте (В моём случае это был usb 3.0 HDD). Код раздела можно оставить поумолчанию.
В некоторых мануалах советуется перед созданием раздела заполнить его случайной последовательностью:
# dd if=/dev/urandom of=/dev/sdb1 bs=1M
Но данная операция будет производиться очень медленно (около 10Мб/c), поэтому на дисках больших объёмов этим можно принебречь.
Создаём криптоконтейер в новой размеченной области (cryptsetup должен запросить новый пароль на этом этапе):
# cryptsetup luksFormat /dev/sdb1
Иформацию о созданном контейнере можно посмотреть так:
# cryptsetup luksDump /dev/sdb1 LUKS header information for /dev/sdb1 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha1 Payload offset: 4096 MK bits: 256 MK digest: 12 75 27 50 d6 a5 6f 62 5e 21 c3 9f a7 a9 9b a5 74 bd d6 74 MK salt: 5d 12 66 83 ac 02 4f d8 83 2b 88 72 f6 10 2c 3f 89 0f a6 e1 61 35 17 0c 4d 26 1e 97 29 97 d7 b6 MK iterations: 116250 UUID: e4e3385c-6fdb-418c-9e48-fc5489cd81fb Key Slot 0: ENABLED Iterations: 474073 Salt: 93 0d ba d1 f3 b7 85 8d 4b 1b a8 e2 d8 ef bd c3 90 49 b7 bf c6 06 32 90 56 e2 ae 0e 08 79 95 2c Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
Подключаем созданный зашифрованный том, указав в конце метку. В данном случае том будет располагаться в /dev/mapper/kontainer:
# cryptsetup luksOpen /dev/sdb2 kontainer Enter passphrase for /dev/sdb1:
Теперь можно работать с зашифрованным томом, как с обычным разделом:
# mkfs.ext4 -L kontainer -m 0 /dev/mapper/kontainer # mkdir /mnt/kontainer # mount /dev/mapper/kontainer /mnt/kontainer
UUID контейнера и файловой системы:
# blkid /dev/sdb1: UUID="e4e3385c-6fdb-418c-9e48-fc5489cd81fb" TYPE="crypto_LUKS" PARTLABEL="Linux filesystem" PARTUUID="b282f3af-e615-46c5-8ebf-85441baaeb09" /dev/mapper/kontainer: LABEL="kontainer" UUID="c90e438d-892c-4b3d-ba21-f7193af4a52b" TYPE="ext4"
Отключаем контейнер:
# umount /mnt/kontainer # cryptsetup luksClose /dev/mapper/secure
На данном этапе хотелось бы автомонтирование зашифрованного диска при загрузке без привязки к имени устройства, по UUID.
В Gentoo это делается добавлением UUID раздела в /etc/conf.d/dmcrypt:
... target=kontainer source='UUID=e4e3385c-6fdb-418c-9e48-fc5489cd81fb' ...
После этого, dmcrypt нужно добавить в автозагрузку:
# eselect rc add dmcrypt boot
Файловая система может монтироваться как обычно в fstab, по UUID устройства /dev/mapper/kontainer:
... UUID="c90e438d-892c-4b3d-ba21-f7193af4a52b" /mnt/kontainer ext4 noatime 0 0 ...
Всё готово к работе!
годно
- Войдите на сайт для отправки комментариев
- cсылка
⏏Отлично!!! Хотелось бы увидеть руководство Gentoo + LVM + LUKS (Шифрование всего винчестера с выносом /boot и ключ шифрование на флешку)))
- Войдите на сайт для отправки комментариев
- cсылка
⏏