вторник, 5 мая 2009 г.

Создание шифрованного раздела в linux используя cryptsetup-luks.

Давно я хотел сделать раздел в linux аналог pgpdisk в windows, которым я активно пользовался лет 5 назад. Эта небольшая статья расскажет как создать зашифрованный раздел в linux используя сryptsetup с поддержкой LUKS.

Cryptsetup


Cryptsetup скрипт для упрощения создания и управления зашифрованными разделов в linux.



Linux Unified Key Setup (LUKS)


LUKS это стандарт для упрощения использования шифрования дисков. Он встраивает в заголовок партиции информацию о алгоритме шифрования, поэтому теперь пользователю не надо помнить его. Флэш накопитель зашифрованный с помощью этого стандарта прекрасно видится HAL'ом и будучи воткнутым в usb порт определяется как зашифрованная и перед подключением предлагает ввести ключ. Также LUKS позволяет использовать несколько ключей одновременно для разных пользователей и несколько других возможностей.



Создание и присоединение зашифрованного файла контейнера и партиции.



Сначала нам надо установить cryptsetup с поддержкой LUKS.

[foot@olin ~]$ sudo yum install cryptsetup-luks



Теперь создаем файл контейнер и loopback и присоединим его.

[foot@olin ~]$ dd if=/dev/urandom of=testfile.img bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 20.9833 s, 5.0 MB/s

[foot@olin ~]$ sudo losetup /dev/loop0 testfile.img
[foot@olin ~]$



Перед тем как мы сможем открыть зашифрованную партицию, мы должны инициализировать ее.

[foot@olin ~]$ sudo cryptsetup luksFormat /dev/loop0

WARNING!
========
This will overwrite data on /dev/loop0 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.
[foot@olin ~]$



Партиция инициализирована и мы можем создать Device-Mapper привязку к ней.

[foot@olin ~]$ sudo cryptsetup luksOpen /dev/loop0 testfs
Enter LUKS passphrase for /dev/loop0:
key slot 0 unlocked.
Command successful.

[foot@olin ~]$ ls /dev/mapper/testfs
/dev/mapper/testfs
[foot@olin ~]$



Теперь можно отформатировать партицию.

[foot@olin ~]$ sudo mkfs.ext2 /dev/mapper/testfs
mke2fs 1.41.4 (27-Jan-2009)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
2432 inodes, 9724 blocks
486 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=9961472
2 block groups
8192 blocks per group, 8192 fragments per group
1216 inodes per group
Superblock backups stored on blocks:
8193

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[foot@olin ~]$

Примечание: ФС с поддержкой журналирования (ext3) у меня не заработало.



Присоединим партицию.

[foot@olin ~]$ mkdir ~/mnt/testfs
[foot@olin ~]$ sudo mount /dev/mapper/testfs ~/mnt/testfs/
[foot@olin ~]$ sudo chown foot:foot ~/mnt/testfs -R
[foot@olin ~]$

Примечание: Тут "foot:foot" это имя моего пользователя и группа в системе.



Подключение существующего зашифрованного файла контейнера.

[foot@olin ~]$ sudo losetup /dev/loop0 testfile.img
[foot@olin ~]$ sudo cryptsetup luksOpen /dev/loop0 testfs
Enter LUKS passphrase for /dev/loop0:
key slot 0 unlocked.
Command successful.
[foot@olin ~]$ sudo mount /dev/mapper/testfs ~/mnt/testfs/
[foot@olin ~]$



Отключение зашифрованного файла контейнера.

[foot@olin ~]$ sudo umount ~/mnt/testfs
[foot@olin ~]$ sudo cryptsetup luksClose /dev/mapper/testfs
[foot@olin ~]$ sudo losetup -d /dev/loop0
[foot@olin ~]$


Добавление дополнительных ключей


LUKS позволяет добавить 8 ключей, которые могут использоваться для доступа к зашифрованному контейнеру.



Добавление нового ключа.

[foot@olin ~]$ sudo cryptsetup luksAddKey /dev/loop0
Enter any LUKS passphrase:
key slot 0 unlocked.
Enter new passphrase for key slot:
Verify passphrase:
Command successful.
[foot@olin ~]$



Просмотр заголовка LUKS.

[foot@olin ~]$ sudo cryptsetup luksDump /dev/loop0
LUKS header information for /dev/loop0

Version: 1
Cipher name: aes
Cipher mode: cbc-essiv:sha256
Hash spec: sha1
Payload offset: 1032
MK bits: 128
MK digest: be 6e 6f 7b 1a 3f 2d b6 eb 18 7d 5f b4 32 16 02 43 f0 fc 67
MK salt: 90 af e6 a6 68 a5 bf 6f ab 65 9a a3 31 65 ee 25
76 03 15 67 99 ed 24 86 d6 42 e4 2c 21 5e ea 84
MK iterations: 10
UUID: 2eae6133-f9fb-4dd5-8b40-4b621dd0f383

Key Slot 0: ENABLED
Iterations: 244906
Salt: 87 c4 c9 9b a6 9e 6d e7 6e b9 ba 1b de 8e c1 ab
eb 2a eb 53 f3 bf ad 9a 8d 1b 23 1f 0e 49 1e 9f
Key material offset: 8
AF stripes: 4000
Key Slot 1: ENABLED
Iterations: 244707
Salt: 9f 9f bb 3e 67 be e3 1e cf a2 a4 f8 f8 28 d3 e2
eb 8a 9f 30 72 09 5c 0a 27 d0 42 5f 7b 37 e3 fa
Key material offset: 136
AF stripes: 4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
[foot@olin ~]$



Удаление ключа.

[foot@olin ~]$ sudo cryptsetup luksKillSlot /dev/loop0 1
Enter any remaining LUKS passphrase:
key slot 1 verified.
Command successful.
[foot@olin ~]$

пятница, 1 мая 2009 г.

Праздник первомайский

Это праздник,
Это праздник,
Это праздник
Первомайский,
Это лёгкий-лёгкий шарик,
Это новая рубашка,
Это флаги, флаги, флаги,
Это красные балконы,
Это праздник Первомайский,
Это лёгкий-лёгкий шарик,
Это мама, это папа,
Это песенка такая!

(c) И. Токмакова