от Rumen(25-07-2004)

рейтинг (19)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

През февруари тази година, Andrew Morten обяви [1], че cryptoloop [2] вече е остарял и ще бъде заменен от dm-crypt [3]. Въпреки, че началното обявление причини известно вълнение, dm-crypt беше добавен към стабилната версия на линукс-2.6.4 ядрото. Настоящата (преводна) статия разглежда въпроса как да инсталирате криптиран дял с помощта на dm-crypt.
dm-crypt осигурява криптиращ слой за device-mapper устройството. Device-mapper драйвера ви позволява да дефинирате нови дялове или логически такива, чрез определяне обхвата на сектори на съществуващи блокови устройства. Обхвата на сектори, който ще се използва от тези дялове се налага върху обектите в съответствие с таблица за съответствие. dm-crypt осигурява точно такъв обект, който може да се използва за да може прозрачно да криптира блоково устройство, с използване на cryptoAPI на новото ядро 2.6.

Преди време cryptoloop се използваше за да се осигури криптиране чрез използване на loopback устройството. dm-crypt е по-коректна реализация и осигурява много по-голяма гъвкавост. Според разработчика на cryptoloop Fruhwirth Clemens:
 dm-crypt е доста по-добър от cryptoloop по няколко причини:
  - не страда от loop.c бъгове (има много - няма разработчик);
  - dm-crypt не зависи от специална потребителска програма (util-linux);
  - dm-crypt използва mempool, който го прави изключително стабилен в сравнение с cryptoloop.

Въпреки, че използва сигурен криптографски алгоритъм, cryptoloop се смята за слаба реализация, отворена за определени типове атаки. Дискусия за слабостите на cryptoloop може да намерите в LWN.net [4]. Dm-crypt използва същите сигурни криптографски алгоритми, но с много подобрена реализация.

ИНСТАЛИРАНЕ НА dm-crypt

Преди да се опитвате да криптирате важни данни използвайки dm-crypt, трябва да сте сигурни, че имате работещи резервни копия на всичко важно за Вас. Започваме със сваляне на необходимите файлове. Нужни са Ви последното Линукс ядро от www.kernel.org [5]. Версия 2.6.4 или по-нова ще работят, но съвета ми е да използвате 2.6.5 или по-ново, тъй като съществуват проблеми (блокиране) при някои системи, работещи с 2.6.4. Също така си свалете дevice-mapper [6], hashalot [7] (по-избор) и cryptsetup.sh [8] - инсталационен скрипт (линковете са преместени в края на статията).

Конфигурирате си ядрото както нормално, добавяйки device-mapper и dm-crypt поддръжка, които ще намерите като Device mapper support и Crypt Target Support в секцията Multi-device support (RAID and LVM). Също така Вие се нуждаете от инсталиране на желаните криптографски модули в секцията Cryptographic Options.

След като веднъж сте инсталирали и заредили Вашето ново ядро направете (проверете) следното. Ако сте конфигурирали device-mapper като модул трябва само да го заредите чрез modprobe dm-mod. Модулът dm-crypt (ако има такъв) ще бъде зареден автоматично от ядрото, когато е необходим. Поставете командата modprobe ... (dm-mod и/или dm-crypt)в стартиращите скриптове, заедно с същата команда за всички криптиращи кодули (aes, blowfish etc)от които се нуждаете.

Device-mapper използва директорията /dev/mapper и /dev/mapper/control устройството. За да ги създадете, изпълнете devmap_mknod.sh (/scripts dir) от device-mapper пакета. Ако всичко е успешно, скрипта ще изведе старшия и младши номера на устройството за новия възел, в противен случай, ако нещо се обърка ще излезе мълчаливо.

След това компилирайте и инсталирайте пакета device-mapper. Разпакетирайте архива и изпълнете обичайните команди: ./congifure, make, maka install  за да инсталирате необходимите библиотеки и програмата dmsetup в /sbin. Ние ще изполваме dmsetup за да създаваме и премахваме устройства, да получаваме информация за устройствата и презареждаме таблиците.

Стартирайки dmsetup create <name> се създава устройство с име <name> под /dev/mapper/ директорията. dmsetup след това очаква съответстващата таблица от стандартния вход (stdin) или по избор можете да подадете файл, съдържащ информацията като трети параметър. Таблицата на съответствие има вида:
<start sector> <sector count> <target type> <arguments>
Таблицата dm-crypt има вида:
0 <sector count> crypt <sector format> <key> <IV offset> <real device> <sector offset>

Параметрите <sector format> и <key> са криптиращия шифър (например aes) и ключът, подадени като шестнадесетични числа, използвани за криптирането на устройството. Вие можете да видите кои шифри са налични чрез проверка на /proc/crypto или зареждане на съответните модули в ядрото с modprobe (insmod). Параметъра <IV offset> обикновенно е 0 (нула), с изключение на специални случаи. <real device> е реалното устройство, което ще се криптира, определено с /dev/xxx или чрез своя номер на устройство, във форма major:minor (при мен /dev/hda6 - 3:6).
Параметъра <sector offset> е отместването (като сектор), където започват криптираните данни върху реалното устройство.

Ако всичко това Ви изглежда прекалено объркващо, не се притеснявайте. Скрипта cryptsetup.sh [9] прави процеса много по-удобен за потребителя.Скрипта използва hexdump и hashalot [10] за да създаде криптиращия ключ. Вие може да работите без hashalot, като използвате опцията -h plain. Копирайте cryptsetup.sh скрипта някъде във Вашия $път ($PATH) (и не забравяйте да го направите изпълним - chmod +x), ако планирате да го използвате.

Скрипта cryptsetup.sh изпълнява dmsetup с опциите, които Вие му зададете за да настрои Вашето криптирано устройство. В дадения по-долу пример ние ще преобразуваме /dev/hdb2 да използва /dev/mapper/cryptvol1.

Първо, unmount устройството и изпълнете fsck за него за да сте сигурни, че имате файлова система без грешки.
#umount /dev/hdb2
#fsck /dev/hdb2

Сега създайте dm-crypt устройството:
#cryptsetup.sh -c aes -h ripemd160 -y -b 'blockdev --getsize\ /dev/hdb2' create cryptvol1 /dev/hdb2

Сега ще трябва да зададете Вашата (нова) парола, която се въвежда след покана. Така създавате устройство /dev/mapper/cryptvol1 на /dev/hdb2, използвайки aes шифър и hashalot, който да генерира ключа на база зададената парола (ползвайте -h plain, ako ne polzwate hashalot). Може да видите пълния списък от опции на cryptsetup.sh след изпълнение на cryptsetup.sh --help.

Сега сте готови да копирате своите данни на новото устройство:
#dd if=/dev/hdb2 of=/dev/mapper/cryptvol1 bs=4k

Проверете внимателно тази команда преди да я изпълните, тъй като тя препокрива всички данни на посоченото устройство. След като веднъж командата е изпълнена, проверете новото устройство за грешки с fsck /dev/mapper/cryptvol1. Ако всичко това премине добре би трябвало да можете да монтирате новото устройство на мястото му /dev/hdb2 - mount /dev/mapper/cryptvol1 /data (при условие, че използвате mount /dev/hdb2 /data за да монтирате дяла).

Ако е необходимо, можете да преобразувате криптираният дял в некруптиран с използване на обратния на вече посочения процес, копирайкиВашите данни от криптираният дялна свободно място (дял). По подобен начин, ако желаете да промените някои опции, като наново криптиране на данните или промяна на паролата, можете да копирате данните между двете монтирани устройства. В момента се работи върху програма, която ще даде възможност това да се прави 'в движение'.

Ненужните устройства могат да се премахват с командата dmsetup remove <name>.
Командата cryptsetup.sh създава връзка за Вашето устройство, така че да монтирате наново Вашата файлова система след рестарт. Вие просто трябва да стартирате отново cryptsetup.sh, подавайки същата парола. Например, ако сложите следното в стартиращия скрипт, ще бъдете запитани за паролата Ви по време на зареждане и Вашето устройство ще бъде отново създадено:
if [ -b /dev/mapper/cryptvol1 ] ; then
  /usr/local/sbin/cryptsetup.sh remove cryptvol1
fi
/usr/local/sbin/cryptsetup.sh -c aes -h ripemd160 -b 'blockdev\
--getsize /dev/hdb2' create cryptvol1
/sbin/mount /dev/mapper/cryptvol1 /data

РЕЗЮМЕ
Dm-crypt е изчистена, стабилна реализация, даваща много по-голяма гъвкавост от cryptloop, чрез използването на device-mapper. Докато използването на dm-crypt в момента е функционално еквивалентно на cryptloop, то обаче е разширяемо и за в бъдеще се планира още по-голяма функционалност. Въпреки, че не е много вероятно в близко бъдеще cryptloop да бъде напълно премахнат от Линукс ядрото, ако планирате да използвате криптирана файлова система то със сигурност трябва да хвърлите поглед на dm-crypt.

Mike Peters е консултант на свободна практика, програмист и дългогодишен Линукс потребител.
Връзки:
[1]http://www.uwsg.iu.edu/hypermail/linux/kernel/0402.2/0673.html
[2]http://cvs.kerneli.org/cryptoloop/
[3]http://www.saout.de/misc/dm-crypt/
[4]http://lwn.net/Articles/67216/
[5]http://www.kernel.org/
[6]http://sources.redhat.com/dm/
[7]http://www.paranoiacs.org/~sluskyb/hacks/hashalot/
[8]http://www.saout.de/misc/dm-crypt/cryptsetup.sh
[9]http://www.saout.de/misc/dm-crypt/cryptsetup.sh
[10]http://www.paranoiacs.org/~sluskyb/hacks/hashalot/
PS: Всичко това работи при мен от около 2-3 седмици, но си спомням, че някъде в процеса създавах файлова система на новия дял, иначе няма да може да се монтира след това.
Ето линка към оригиналната статия (на английски):
http://www.linux.com/article.pl?sid=04/06/07/2036205
Румен


<< Свържете OpenOffice.org към PostgreSQL (превод) | SAMBA като PDC >>