Комментарии

Галерея

Опрос

Из каких стран идет больше всего спама, попыток взлома на ваши серверы?:

Создание зашифрованного диска в Gentoo (LUKS, cryptsetup)

Иногда возникает необходимость создания зашифрованного диска. Мне известно два решения этой проблемы - это 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
...

Всё готово к работе!

Аватар пользователя Celt

годно

Отлично!!! Хотелось бы увидеть руководство Gentoo + LVM + LUKS (Шифрование всего винчестера с выносом /boot и ключ шифрование на флешку))) Бууу