пятница, 29 февраля 2008 г.

Как сделать зашифрованный диск

Дано: Gentoo Linux
Рабочая болванка - 1 штука.

Для начала убедимся, что у нас в ядре поставлены нужные галочки (версия 2.6.23):
BLK_DEV_LOOP=y
Prompt: Loopback device support
Location: -> Device Drivers -> Block devices

BLK_DEV_CRYPTOLOOP=y
Prompt: Cryptoloop Support
Location -> Device Drivers -> Block devices -> Loopback device support

В разделе Cryptographic API указать используемые алгоритмы шифрования, в нашем примере:
CRYPTO_TWOFISH=y
Prompt: Twofish cipher algorithm
Location:
-> Cryptographic API

Можно это все собрать и модулями, главное проследить чтобы они были загружены. Однако, если часто этим пользоваться, то собрать все необходимое прямо в ядре намного удобнее.

(добавлено 20080423): Проверить софт: sys-apps/util-linux должна быть с USE флагом loop-aes.

Затем:
1. создаем чистый файл под размер болванки. В примере ниже будет создан файл 1024*4200k байт.


# dd if=/dev/zero of=./disk.dat bs=1024 count=4200k

2. создаем шифрованный loop device и вводим пароль для шифрования:

# losetup -e twofish256 /dev/loop0 ./disk.dat
Password:

3. создаем файловую систему на вновь созданном устройстве

# mkfs.ext2 /dev/loop0

4. монтируем устройство

# mount /dev/loop0 /mnt/secure-disk

5. После этого в папку /mnt/secure-disk копируем все необходимые данные.
Оставшееся место можно, как обычно, контролировать командой df.

6. Затем размонтируем и удаляем устройство

# umount /mnt/test && losetup -d /dev/loop0

Полученный таким образом файл disk.dat можно записать на болванку. Важно помнить, что файлы больше 2Гб требуют на диске файловую систему UDF, которая, если не ошибаюсь, в Windows не поддерживается. Проблему можно обойти сделав несколько фалов размером до 2 гб и записать диск в обычном формате ISO.

Также лучше не забыть положить на диск файл readme.txt с короткой инструкцией. Она вам самим пригодится, чтобы не забыть какой алгоритм шифрования использовался:

(http://knopkodav.blogspot.com/2008/02/blog-post.html)

# losetup -e twofish256 /dev/loop0 ./disk.dat
Password:
# mount /dev/loop0 /mnt/secure-disk -t ext2
...
# umount /dev/loop0
# losetup -d /dev/loop0


Пока не изученные альтернативы:
loop-aes

пятница, 8 февраля 2008 г.

Drupal тип поля password_confirm

Никогда не ставьте
'#maxlength' => ххх,

для необязательных типов полей
'#type' => 'password_confirm',

получите ошибку
"warning: mb_strlen() expects parameter 1 to be string, array given in /var/www/localhost/htdocs/includes/unicode.inc on line 370."

Это связно с тем, что Друпал проверят длинну поля, а поскольку password_confirm - массив из двух полей, то имеем некорректный параметр передаваемый в mbstrlen.

Немного бэктрейса (лишнее вырезано):
warning: mb_strlen() expects parameter 1 to be string, array given in /var/www/html/localhost/htdocs/includes/unicode.inc on line 370.


Array
(
[#type] => password_confirm
[#description] => To change the current password, enter the new password in both fields.
[#maxlength] => 30
[#size] => 40
[#post] => Array
(
[sz_personal_pass] => Array
(
[pass1] =>
[pass2] =>
)
)
[#name] => sz_personal_pass
[#id] => edit-sz-personal-pass
[#value] => Array
(
[pass1] =>
[pass2] =>
)
[#needs_validation] => 1
)