Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2012-03-20

Практикум dm-crypt (LUKS, cryptsetup)

LUKS is the standard for Linux hard disk encryption. ... While LUKS is a standard on-disk format, there is also a reference implementation. LUKS for dm-crypt is implemented in an enhanced version of cryptsetup.

Недавно я отчитался (в виде наблюдений за производительностью) по использованию eCryptfs. Теперь запишу отчет о dm-crypt.

eCryptfs годится, когда закрыть от посторонних глаз надо отдельное дерево каталогов или папочку-другую. Если же оперировать дисковыми разделами, то удобнее, надежнее и производительнее использовать блочную прослойку. В смысле, криптовать не на уровне файлов а на уровне блоков ввода/вывода. Отдельно надо заметить возможность аппаратного ускорения операций алгоритмов AES современными камнями от Intel (AES-NI). dm-crypt умеет аппаратно ускоряться, eCryptfs — нет (во всяком случае, я не встретил инструкции по зацеплению eCryptfs за крипто-API ядра). Могу сразу сказать, я разницу между ускоренным AES и традиционным заметил. Это экономия около 10% загрузки CPU и прибавка в 10 — 15 мегабайт/сек. трансфера с диска на диск. Хотя, надо сделать скидку на разницу в подходах — файловый IO и блочный IO. А с другой стороны, где-то я видел число более 500 мегабайт/сек. на ускоренном AES. Более чем достаточно, ящетаю.

Итак, практикум.

Сначала надо сделать копию данных с раздела, назначенного под криптование
rsync -av /extst1/virt /extht1/virt
Пока пишется, читаем теорию и готовимся.

Смотрим, есть ли в ядре поддержка AES
cat /boot/config-3.2.0-0.bpo.2-amd64 | grep AES
Как дела с модулями
lsmod |grep aes
   aesni_intel            50498  216
   cryptd                 14463  1 aesni_intel
   aes_x86_64             16796  1 aesni_intel
   aes_generic            37122  2 aesni_intel,aes_x86_64
Видно, что AES-ni есть и даже загружен, это какбэ намекает на то, что акселерация будет.

Ставим Cryptsetup
aptitude install cryptsetup

Посмотрев в /etc/fstab видно, что нужный мне раздел монтируется по uuid
UUID=216858de-b781-4efa-9666-4373804a17cf /extst1
А вывод команды mount говорит о двойном подключении, сперва
/dev/sdb1 on /extst1 type ext4 (rw)
а потом
/extst1/virt on /extst1/virt type ecryptfs...
А тут и копирование закончено. Если не закончено — ждем.

Раз два монтирования, надо два раза размонтировать
umount /extst1/virt
umount /dev/sdb1

Создаем криптованный раздел
cryptsetup --verbose --verify-passphrase luksFormat /dev/sdb1
если параметры по умолчанию (алгоритмы, длина ключа и пр.) не устраивают, читаем man cryptsetup и задаем параметры ручками. Умолчальные же параметры можно глянуть в выводе команды
cryptsetup --help

Теперь криптованный раздел можно подключить к мапперу
cryptsetup luksOpen /dev/sdb1 extst1crypt
или, если уж основываться на uuid, сперва выясним его
blkid
   /dev/sdb1: UUID="96eed01e-6783-4e64-917a-2aa1f0a76f1c" TYPE="crypto_LUKS"
и подключаем так
cryptsetup luksOpen /dev/disk/by-uuid/96eed01e-6783-4e64-917a-2aa1f0a76f1c extst1crypt

Проверим статус
cryptsetup status extst1crypt
   /dev/mapper/extst1crypt is active:
     cipher:  aes-cbc-essiv:sha256
     keysize: 256 bits
     device:  /dev/sdb1
     offset:  2056 sectors
     size:    976760824 sectors
     mode:    read/write

Создадим файловую систему
mke2fs -t ext4 /dev/mapper/extst1crypt
И смонтируем в дерево файлсистем
mount /dev/mapper/extst1crypt /extst1

Осталось вернуть взад файло из резервной копии
# chown -R v:users /extst1
# chmod -R 766 /extst1
$ rsync -av /extht1/virt/ /extst1/virt/
   sent 206013701910 bytes  received 945 bytes  115123611.54 bytes/sec
   total size is 205988553697  speedup is 1.00

И на тот случай, если понадобится вручную отключить раздел, заклинать так
umount /dev/mapper/extst1crypt
cryptsetup luksClose /dev/mapper/extst1crypt

Собственно, все. Тут нарисовано простейшее использование dm-crypt в обертке cryptsetup. Использование ключей в виде файлов, скрытых разделов и прочие продвинутые вещи — остались за кадром. Кому надо, тот сам нагуглит, инфы полно.

По материалам

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)