UPD к предыдущему посту про tcplay.

TCPLAY: шифрование несистемного раздела. (копия)

7. Отмонтирование и отключение раздела (поместить в скрипт /etc/rc.d/rc.local_shutdown):

umount /mnt/sdb2c
tcplay --unmap=sdb2c
rmdir /mnt/sdb2c

7. Отмонтирование и отключение раздела (поместить в скрипт /etc/rc.d/rc.local_shutdown):

umount /mnt/sdb2cи rmdir /mnt/sdb2c

Можно поместить для успокоения души, tcplay и xpartx сами должны при получении KILL-сигнала корректно завершить работу и ничего не попортить, как они делают с разделами на системном диске.

TCPLAY: шифрование несистемного раздела.

Как шифровать системный раздел и сделать загрузочную флешку c initrd для шифрованного Linux, можно найти по тегу tcplay (копия)

Подключил я к серверу дополнительный HDD и решил его пошифровать.

Внимание! Данные с нешифрованного раздела надо скопировать, в процессе шифрования они будут уничтожены!

1. Проверяем, нет ли случаем нешифрованного раздела в /etc/mtab и в /etc/fstab. Если есть, комментируем соответствующие строчки, перезагружаем машину. Пример:

fstab:

...
#/dev/sdb2		/mnt/sdb2	 ext2	     defaults	      0   0
...


mtab:

...
#/dev/sdb2 /mnt/sdb2 ext2 rw 0 0
...

2. Генерируем ключ, можно воспользоваться /dev/urandom (да, это безопасно, уже обсуждалось):

dd if=/dev/urandom of=sdb2key bs=1 count=1048576

Вывод:

1048576+0 records in
1048576+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 2.34336 s, 447 kB/s

3. Шифруем раздел:

tcplay --create --device=/dev/sdb2 --cipher=AES-256-XTS --pbkdf-prf=whirlpool --keyfile=sdb2key --insecure-erase

Внимание! Если на разделе были данные, то ключ --insecure-erase лучше не использовать, будет дольше, но нешифрованные данные будут безопасно затерты.

Внимание! Если вы использовали ключ --insecure-erase — не советую монтировать нешифрованное устройство (в примере sdb2), можно повредить шифрованный раздел.

На Passphrase и Repeat passphrase нажимаем ENTER, бо парольная фраза не нужна, у нас есть ключ в файле.

Вывод:

Summary of actions:
 - Create volume on /dev/sdb2

 Are you sure you want to proceed? (y/n) y
Creating volume headers...
Depending on your system, this process may take a few minutes as it uses true random data which might take a while to refill
Writing volume headers to disk...
All done!

Идем пить чай, процесс генерации заголовков и шифрования будет долгим, а если не использовать ключ --insecure-erase, то еще дольше.

5. Маппим (подключаем) и монтируем шифрованный диск:

tcplay --map=sdb2c --device=/dev/sdb2 --keyfile=/path/to/keyfile/sdb2key

6. Далее диск надо отформатировать, желательно в нежурналируемой файловой системе, например ext2:

mkfs -t ext2 /dev/mapper/sdb2c

Вывод:

mke2fs 1.43.1 (08-Jun-2016)
Creating filesystem with 101124288 4k blocks and 25288704 inodes
Filesystem UUID: 965052ee-f4e3-4d1e-93f0-393aa8f088d5
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968

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

Продолжаем монтирование:
mkdir -p /mnt/sdb2c
mount -t ext2 /dev/mapper/sdb2c /mnt/sdb2c

Эти же строки надо включить в стартовый скрипт (/etc/rc.d/rc.local) :

tcplay --map=sdb2c --device=/dev/sdb2 --keyfile=/path/to/keyfile/sdb2key
mkdir -p /mnt/sdb2c
mount -t ext2 /dev/mapper/sdb2c /mnt/sdb2c

где: /path/to/keyfile/sdb2key — путь к реальному ключевому файлу. Файл(-ы) от других разделов вполне можно хранить на системном разделе, если тот зашифрован.

7. Отмонтирование и отключение раздела (поместить в скрипт /etc/rc.d/rc.local_shutdown):

umount /mnt/sdb2c и rmdir /mnt/sdb2c

Можно поместить для успокоения души, tcplay и xpartx сами должны при получении KILL-сигнала корректно завершить работу и ничего не попортить, как они делают с разделами на системном диске

ФАНФАРЫ!

Установка Linux и шифрование ее и всего содержимого жесткого диска. Часть IV

Этап #19
Восстановление системы на зашифрованный диск. Форматирование разделов

Сначала, как и на этапе 18, необходимо получить доступ к зашифрованному жесткому диску
tcplay --map=cryp_sdb --device=/dev/sdb --keyfile=/path/to/key/file

Далее, с помощью утилиты kpartx, доступ к разделам на жестком диске
kpartx -av /dev/mapper/cryp_sdb

где:
Опция a – подключить разделы, содержащиеся на зашифрованном устройстве
Опция v – отобразить, какие разделы были подключены.
/dev/mapper/cryp_sdb – подключенный с помощью tcplay зашифрованный диск.

Далее форматируем разделы. Главный:
mkfs –t ext2 /dev/mapper/cryp_sdb1
Дополнительный:
mkfs –t ext2 /dev/mapper/cryp_sdb5
И раздел подкачки:
mkswap /dev/mapper/cryp_sdb6

Отключаем подключенные разделы:
kpartx –dv /dev/mapper/cryp_sdb

Отключаем зашифрованный жесткий диск:
tcplay --unmap=cryp_sdb
Перезагружаемся обратно в консоль тестового initrd

Этап #20
Восстановление системы на зашифрованный диск. Восстановление файлов из ранее созданных бэкапов.

Как и в предыдущем этапе, сначала получаем доступ к зашифрованному жесткому диску:
tcplay --map=cryp_sdb --device=/dev/sdb --keyfile=/path/to/key/file

И его разделам:
kpartx -av /dev/mapper/cryp_sdb

Предположим, что бэкапы системы были сохранены на первый FAT32 раздел флешки sda1 и находятся по следующим путям:
/mnt/sdb1/bak/system.tar.gz и /mnt/sdb1/bak/home.tar.gz

Создаем точку монтирования для флешки (если не создана):
mkdir /mnt/sdb1
И монтируем ее (если не примонтирована)
mount –t vfat /dev/sdb1 /mnt/sdb1

Создаем точки монтирования для разделов жесткого диска:
mkdir /mnt/sda1
mkdir /mnt/sda5

Внимание! Точки монтирования для жестких дисков должны называться также, как назывались при создании бэкапов!

Монтируем разделы:
mount –t ext2 /dev/mapper/cryp_sdb1 /mnt/sda1
mount –t ext2 /dev/mapper/cryp_sdb5 /mnt/sda5

Распаковываем архивы:

tar –xvf /mnt/sda1/bak/home.tar.gz –C /
tar –xvf /mnt/sda1/bak/system.tar.gz –C /

где:
Опция x – распаковать архив
Опция v – отображать имена распаковываемых файлов
Опция f – архив находится в файле (а не направлен со STDIN)
/mnt/sda1/bak/home.tar.gz – путь к файлу архива
–C – указывает, в какой каталог распаковать архив (сам каталог указывается через пробел, и в данном случае это корень, т.е. / ).

Скопируем заранее исправленные fstab и mtab, предположим, они были сохранены в первый раздел загрузочной флешки, в каталог tabs и данный раздел смонтирован:

cp /mnt/sdb1/tabs/fstab /mnt/sda1/etc/fstab
cp /mnt/sdb1/tabs/fstab /mnt/sda1/etc/mtab

После копирования файлов отмонтируем разделы:
umount /mnt/sda1
umount /mnt/sda5

Отключаем подключенные разделы:
kpartx –dv /dev/mapper/cryp_sdb

Отключаем зашифрованный жесткий диск:
tcplay --unmap=cryp_sdb
Перезагружаемся уже с рабочим initrd.

Поздравляю! Если система успешно загрузилась с рабочим initrd, значит, задача выполнена!
После успешной загрузки можно подправить конфиг GRUB, так, чтоб сразу загружалась система с рабочим initrd.

Скачать мануал целиком в PDF

Установка Linux и шифрование ее и всего содержимого жесткого диска. Часть III

Этап #16
Подготовка конфигурационных файлов и рабочего initrd

На этом этапе первым делом определимся, под каким именем мы будем обращаться к нашему зашифрованному жесткому диску. Это имя будет использоваться в команде map утилиты tcplay. Для примера здесь и далее я буду использовать имя cryp_sdb.
Далее необходимо скопировать в отдельный каталог на загрузочной флешке (для примера пусть будет cfg) файлы /etc/fstab и /etc/mtab из основной ОС и отредактировать их, заменив /dev/sdaX на /dev/mapper/cryp_sdbX. Где X – номер конкретного раздела на жестком диске.
Далее под катом

Установка Linux и шифрование ее и всего содержимого жесткого диска. Часть II

Этап #11.
Добавление tcplay в образ initrd.

Для этого создаем какой-нибудь временный каталог и распаковываем туда из пакета (tc-play-2.0-i486-1.tgz в моем случае) полученного на этапе 8 файлы (дальнейшие пути внутри пакета)
usr/lib/libtcplay.so.2.0
usr/sbin/tcplay
Я просто воспользовался mc, зашел им в архив и нужное скопировал клавишей F5 в /tmp/tc-play, mc сам вызвал архиватор и распаковал все за меня.
Далее, выходим из архива и копируем во временный каталог (ну чтоб все нужные файлы были в одном месте и мы не запутались) файл
/lib/libdevmapper.so.1.02 (если при создании initrd, вы пользовались опцией –L, то эта библиотека уже на месте)
Теперь из временного каталога (да, можно было и сразу) скопируем файлы
libtcplay.so.2.0
libdevmapper.so.1.02
в /boot/initrd-tree/lib
(каталог библиотек файловой системы initrd)
а файл
tcplay
в /boot/initrd-tree/bin

Также tcplay во время своей работы, а конкретно подключения зашифрованных разделов вызывает из каталога /usr/sbin программу dmsetup. Соответственно, необходимо положить dmsetup в /boot/initrd-tree/usr/sbin

Чтобы dmsetup работал правильно, ему необходим каталог /dev/mapper, его тоже надо создать
mkdir /boot/initrd-tree/dev/mapper

Далее выходим из каталога initrd-tree, удаляем из директории /boot ранее созданный initrd.gz и запускаем mkinitrd без параметров, далее примонтируем нашу загрузочную флешку, заменяем файл /mnt/sda2/absolute/initrd.gz на пересозданный initrd.gz, перезагружаем компьютер и выбираем созданный на этапе 8 пункт для тестирования initrd.gz

Если все сделано правильно, то в конце загрузки будет выведено сообщение «Hello, world!» и приглашение оболочки, в котором мы введем команду tcplay. Программа должна выдать краткую справку по своим параметрам. После чего вводим команду exit и загружаемся в основную ОС.

Этап #12.
Генерация ключа для шифрования.

Для генерации ключа можно взять данные из /dev/urandom.
Если было несколько перезагрузок основной ОС и ОС некоторое время работала, то это должно быть довольно надежно. Хотя при написании данной статьи я и сомневался в этом, но мои сомнения были развеяны более опытными специалистами 🙂
Можно также воспользоваться генератором ключевых файлов, входящим в комплект Windows или Linux-версии Truecrypt, в таком случае следует использовать версию 7.1a, последнюю на момент закрытия проекта Truecrypt, скачать каковую можно, например отсюда.

Можно воспользоваться сторонними генераторами случайных высокоэнтропийных последовательностей, а можно взять (как и при использовании Truecrypt) любой файл, первый мегабайт которого и будет использован в качестве ключевого файла.
Нежелательно в последнем случае использовать в качестве такого файла какой-нибудь стандартный системный файл или фотографию вашего кота, понятно, что при получении доступа к жесткому диску, злоумышленник сможет его без особого геморроя подобрать.

Вот команда для генерации ключа с помощью /dev/random – стандартного устройства для получения псевдослучайных последовательностей
dd if=/dev/random of=/путь/к/файлу/имя_файла bs=1 count=256

Команда dd подробно описана, например, здесь

Далее под катом

Установка Linux и шифрование ее и всего содержимого жесткого диска.

Нам понадобятся:
1. Дистрибьютив Linux. Я здесь и далее использовал Slackware 14.2
2. Live CD Linux, я использовал Puppy Rus Slacko,

Идея в том, чтоб наша ОС и данные находились на надежно зашифрованных разделах, на жестком диске внешне не должно быть никакой разбивки, а система загружалась без ввода парольной фразы или ключа.
Как это можно реализовать
Загрузчик системы и ключ доступа будут храниться на небольшом(<50Mb) разделе флешки, при включении загрузчик разблокирует доступ к шифрованному винту, загружает ядро, далее происходит обычная загрузка системы.

Я не стал использовать LVM, а вместо LUKS выбрал клон truecrypt’а — tcplay

Этап #1. Разбиение диска на разделы

Итак, первым делом создаем нужные разделы на диске. Я сделал это в графической оболочке Puppy Rus с помощью имеющегося на диске gparted, но ничего не мешает вам сделать это с помощью другой программы.

Этап #2.
Подготовка загрузочной флешки.

Действуем как в вышеупомянутой статье – разбиваем флешку на 2 раздела, первый большой и видимый из Windows и других ОС, второй маленький – с загрузчиком операционной системы и ключами, отформатированный в Ext2. В статье рекомендуется сделать его приблизительно 50 Мб, и для загрузчика GRUB, ядра, хранения начальных настроек этого хватит. Я же сделал второй раздел побольше (1Гб) и перенес на него дополнительно Live дистрибутив Puppy Linux (чтоб в процессе настроек не грузиться с CD или другой флэшки).

Этап #3.
Установка загрузчика GRUB

Необходимо извлечь загрузочные флешки с которых ставили ОС, и/или с которых загружали Puppy Slacko, если таковые были использованы, и вставить нашу размеченную подготовленную загрузочную флешку.

Я воспользовался графической утилитой установки GRUB c LiveCD Puppy Slacko, доступ к которой можно получить из главного меню Puppy Slacko (оно по-умолчанию там же где и «Пуск» у Windows) «Система» — «Настройка загрузчика GRUB»
1. В первом диалоговом окне выбираем способ установки simple
2. Во втором предлагается выбрать разрешение экрана при загрузке, я выбрал standart, ибо для Slackware потом все равно необходимо перенастроить параметры разрешения экрана при загрузке в конфиге GRUB.
3. В следующем окне необходимо указать местоположение директории boot, это второй раздел нашей флешки, который у меня называется sdb2, соответственно указывается устройство /dev/sdb2
4. В следующем окне выбираем запись загрузчика в MBR
5. В следующем окне вводим устройство, в MBR которого будет записан загрузчик, в данном случае это наша флешка, которая обозначена как /dev/sdb (у меня)

Продолжение под катом

Поздравляю! Мы загрузились с помощью образа initrd до загрузки основной ОС.
Для продолжения загрузки надо ввести exit и нажать enter. Управление будет передано программе init из основной ОС и основная ОС загрузится.

Чиним поддержку криптографии и ошибку при запуске tcplay в Puppy Slacko 5.5. Часть III

Преамбула

Этот способ несколько сложнее, но ненамного.
Что сделаем:
1. Пересоберем ядро с поддержкой криптографии
2. Встроим tcplay в основную систему, т.е. после наших манипуляций он будет доступен «из коробки»
Преимущества:
— Не надо больше ничего делать
Недостатки:
— Способ требует больше движений
Начало
Тут я забегу немного вперед, и скажу, чтоб наше ядро (и соответственно далее Puppy Linux) запустился корректно, нам будет необходима поддержка UnionFS в ядре. На официальном сайте UnionFS я не нашел патч для поддержки UnionFS для версии оригинального ядра 3.2.33, поэтому выбрал ближайший патч для ядра версии 3.2.62 и, соответственно, решил изменить оригинальную версию ядра. На самом деле я долго, местами методом тыка пытался подружить оригинальное ядро с патчем для других версий, но не получилось, чтоб не загружать заметку, оставлю путь за кадром.
Если мы скомпилируем ядро без патча UnionFS, то при запуске операционной системы мы получим примерно такую картинку:

Подготовка
Нам необходимы:
1. Исходники ядра, которые можно взять здесь
2. Патч для поддержки UnionFS для новой версии ядра
3. Комплект разработчика, для соответствующей версии Puppy Linux, если мы будем собирать ядро в ней, или же «большой» Linux, в котором есть все нужные инструменты. (см. предыдущую заметку )
4. Комплект для работы со SquashFS, чтоб разобрать основной файл Puppy Linux Slacko, добавить туда, что нам надо, собрать обратно и оттестировать. Я на «большом» Линуксе просто скачал squashfs-tools-4.2 через sbopkg, но кому мало ли надо, вот оф. сайт
Внимание! Если собирать ядро в Puppy, то следует делать это на внешнем разделе, на котором имеется достаточно места, не следует собирать ядро в стандартных директориях, изменения в которых сохраняются в персональный файл. В противном случае место в файле сохранения и оперативная память быстро кончатся и процесс может до конца и не дойти.
Я собирал новое ядро для Puppy в «большом» линуксе.
Приступаем

1. Распакуем исходники ядра в отдельную директорию.
2. Скопируем в эту директорию патч для поддержки UnionFS
3. Распакуем его командой gunzip unionfs-2.6_for_3.2.62.diff.gz
4. Применим патч
patch -p1 -i <имя файла заплатки>
т.е. для нашего случая
patch -p1 -i unionfs-2.6_for_3.2.62.diff
Конфигурирование

Вообще это самый большой, больной и неоднозначный вопрос при сборке ядра, посему тут мне придется отослать читателя к более подробному и обстоятельному материалу, ссылки на который будут в конце заметки.
Я же остановлюсь только на некоторых моментах, которые непосредственно важны для нашей задачи.
Итак, у меня имелся в наличии готовый конфиг (который можно скачать здесь), и я подправил в нем только некоторые моменты
Во-первых, копируем файл .config в директорию с исходниками ядра.
Во-вторых, открываем в любом удобном текстовом редакторе файл Makefile, находящийся в директории с исходниками, ищем в нем 4 строчку сверху: EXTRAVERSION= и дописываем туда, что-нибудь типа -pcry (Puppy с поддержкой криптографии). Эта настройка добавит к имени ядра соответствующий постфикс, и кто-нибудь, случайно скачавший мое изделие, будет знать, что ядро не нативное, и возможно в нем работает криптография, но что-нибудь другое важное отвалилось :))
Наконец, запускаем конфигурирование командой
make menuconfig
Далее идем в раздел Cryptographic API и устанавливаем переключатели так, как это указано на нижеследующих картинках.
1 2 3
Далее идем в File systems и обязательно включаем в ядро поддержку Ext2, Ext3 и Ext4 файловых систем
В разделе File systems ищем подраздел Miscellaneous filesystems, заходим в него и проверяем, чтобы Union file system, был встроен в ядро <*>, а также проверяем, что в ядро встроена SquashFS 4.0
1 2 3
Собираем ядро

В директории с исходниками запускаем команду make bzImage
И идем пить чай, или водку. Возможно, с учетом скорости работы компьютера, и из самовара.
Далее собираем модули
make modules
И опять идем пить из самовара
На сборку ядра на селероне с 2.2 ггц тактовой частоты и 1 Гб оперативной памяти ушло 15 минут, а модули собирались час.
Подготавливаем ОС.

Внимание! Операции по подготовке ОС, разборке главного файла, его сборке и внедрению новых программ лучше выполнять из под root, чтоб не слетели права на некоторые системные файлы.
Команды make modules_install и make install также выполняются с правами root
1.Сначала разбираем основной файл slacko 5.5. — puppy_slacko5.5.sfs
2.Качаем необходимые пакеты LVM2, tcplay и Multipath tools. Ссылки здесь
3.Распаковываем пакеты, каждый в отдельную директорию
4. Копируем файл puppy_slacko_5.5.sfs в отдельную директорию, и, что называется, разбираем на запчасти, точнее распаковываем.
unsquashfs puppy_slacko_5.5.sfs

Образуется директория squashfs-root с содержимым sfs-файла
5.Теперь соберем все модули в одну кучу, на «большом» Линуксе это проблемы не представляет, а вот на Puppy должно хватить места в файле сохранения.
Переходим в каталог с исходниками ядра и выполняем команду
make modules_install
Если вы работаете не через удаленный терминал, то направьте вывод команды в текстовый файл:
, например
make modules_install >/mnt/sdb1/kernel/ok/out.txt
6.Создаем отдельный каталог (что-нибудь типа /mnt/sdb1/kernel/ok), в нем подкаталог lib, а в подкаталоге lib подкаталог modules и копируем в него каталог 3.2.62-pcry из /lib/modules
Дальше идет небольшой геморрой, надо скопировать все собранные Firmware-модули. Что это такое, можно прочитать, например тут. Поскольку я делал все манипуляции на удаленном компьютере через терминал, я просто скопировал из окна терминала нужные мне данные (они есть в выводе команды make modules_install) и написал 2 скрипта, облегчающих мне работу.
Нужная мне часть из вывода команды
Первый создает в моем рабочем каталоге нужную мне структуру подкаталогов (запускается в /mnt/sdb1/kernel/ok/lib/firmware), а второй копирует нужные файлы.
7. Подготавливаем новый sfs-файл, в директорию squashfs-root копируем (далее все пути относительно squashfs-root)
-Директорию 3.2.62-pcry в lib/modules (и удаляем из lib/modules 3.2.33-4g)
-Директорию firmware в lib и при необходимости заменяем нужные файлы
-Из распакованных пакетов копируем в корень squashfs-root все директории со всеми файлами, кроме директорий install
-Создаем в каталоге squashfs-root 3 скрипта 1 2 3, это doinst-скрипты, можно скопировать их из директорий install соответствующих пакетов, им нужно поставить права на исполнение и выполнить, после чего их можно удалить.
8. Выходим из squashfs-root и собираем основной файл Puppy Linux
squashfs-root puppy_slacko_5.5.sfs

Установка нового ядра и главного файла

1. Делаем копию puppy_slacko_5.5.sfs и файла ядра vmlinuz
2. Если вы работали в "большой" ОС, также стоит сделать копию каталога /boot и конфигурации загрузчика
3. Копируем новый главный файл на место предыдущего (он будет немного больше прежнего по размерам, это нормально).
4. Переходим в каталог с исходниками ядра и выполняем команду make install
5. Копируем из /boot vmlinuz вместо файла vmlinuz оригинального Puppy и при необходимости восстанавливаем /boot и конфигурацию загрузчика.
Если что-то не получилось

Или же что-то не устраивает, то всегда можно ядро подправить, пересобрав заново с нужными опциями. Итак, чтобы "вернуть все в зад" нужно:
1. Перейти в каталог с исходниками ядра и скопировать куда-нибудь файл .config, чтобы потом не выполнять конфигурирование заново.
2. Ввести команду make mrproper (Эта команда нужна для удаления временных файлов, созданных при предыдущей сборке. Она удаляет также все настройки, которые Вы сделали во время прошлой сборки.)
Вернуть .config обратно, снова запустить make menuconfig, отконфигурировать заново и запустить make bzImage (ну или make modules, если косяк связан с каким-то модулем, а не с настройкой ядра). Можно отдельно независимо пересобирать ядро и модули (и даже не все модули целиком, а только некоторые из них) если вы знаете, в каком конкретно модуле косяк. Патчи ядра сохраняются и после выполнения очистки.
Небольшая неудача с loglevel

У меня так и не получилось штатными средствами сбросить Default message log level при сборке ядра на уровень 0, как это походу было сделано в оригинальном ядре, и при загрузке выскакивали лишние сообщения ядра, портившие оригинальную красивую загрузку Puppy, патчить ядро я не решился (чтоб чуть что все таки можно было посмотреть вывод ошибок), и просто оставил уровень по умолчанию. А эстетичную загрузку можно вернуть, дописав loglevel=0 в качестве параметра ядра при загрузке, в настройке загрузчика:
kernel /slacko/vmlinuz ro vga=normal loglevel=0

Готовый дистрибутив

Можно скачать тут Puppy Slacko 5.5. NonPAE Crypto Mod

Использованные источники

1. Ставим ядро 2.6, или Ядерная физика для домохозяйки. Версия 2.0 Копия
2. Сборка ядра linux 3.4.* Копия
3. Работаем с модулями ядра в Linux Копия
4. Debugging by printing

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/328027.html
Прокомментировать заметку можно по ссылке выше.

Чиним поддержку криптографии и ошибку при запуске tcplay в Puppy Slacko 5.5. Часть II.

Преамбула
Что сделаем:
— Встроим tcplay, сопутствующие утилиты и необходимые модули в основной файл Puppy Slacko, чтоб tcplay был доступен «из коробки».
Плюсы:
— tcplay и недостающие криптографические модули будут работать из коробки, даже если файл сохранения с соответствующими изменениями испортился/потерялся.
Минусы:
— способ требует больше движений, но все-таки меньше, чем, если полностью пересобирать ядро.
— немного увеличится размер главного файла.
Что требуется.

1. Предварительно собранные модули для PAE или Non-PAE версии Slacko. См. соответствующую здесь
2. «Большой» Linux или Puppy с комплектом разработчика.
3. Комплект для работы со SquashFS, чтоб разобрать основной файл Puppy Linux Slacko, добавить туда, что нам надо, собрать обратно и оттестировать. Я на «большом» Линуксе просто скачал squashfs-tools-4.2 через sbopkg, но кому мало ли надо, вот оф. сайт
4. Необходимые пакеты LVM2, tcplay и Multipath tools. Ссылки здесь
5. Скрипт, загружающий модули.
Примечание: ниже описанным образом можно встроить и другие программы, которые недоступны из коробки, только не переусердствуйте, чтоб сильно не раздуть главный файл sfs.
Начинаем

Внимание! Операции по подготовке ОС, разборке главного файла, его сборке и внедрению новых программ лучше выполнять из под root, чтоб не слетели права на некоторые системные файлы.
Примечание:
придется много чего распаковывать, копировать, пользуйтесь mc для удобства
1. Помещаем главный файл puppy_slacko_5.5.sfs в отдельный каталог и распаковываем командой unsquashfs puppy_slacko_5.5.sfs. По окончании процесса, в каталоге образуется подкаталог squashfs-root с содержимым sfs-файла.
2. Если вы скачали готовые модули, то просто распакуйте в каталог squashfs-root каталоги bin и lib из архивов, при необходимости заменяя файлы. Если вы сами собирали модули, руководствуясь предыдущими заметками, скопируйте их в подкаталог lib/modules/XXX.XXX.XXX/kernel/crypto подкаталога squashfs-root где XXX.XXX.XXX — версия ядра, а также создайте в подкаталоге bin скрипт tcplay-mod:

#!/bin/bash
echo "Loading modules..."
modprobe lrw
modprobe xts
modprobe cbc
modprobe rmd160
modprobe sha256
modprobe wp512
modprobe aes
modprobe serpent
modprobe twofish
modprobe dm-crypt
echo "Complete!"
И назначьте ему права на исполнение
3. Модифицируйте файл squashfs-root/etc/rs.d/rs.local дополнив его командой /bin/tcplay-mod >/logmod, если вы не используете файерволл Puppy, закомментируйте предыдущую строчку. Вывод процесса загрузки модулей будет происходить в файл /logmod, при необходимости это можно будет использовать для отслеживания ошибок при запуске модулей.
4. Назначьте файлу squashfs-root/etc/rs.d/rs.local права на исполнение.
5. Распакуйте в отдельный каталог пакет поддержки LVM2
6. Скопируйте из этого каталога все подкаталоги, кроме подкаталога install в каталог squashfs-root
7. Скопируйте из подкаталога install в каталог squashfs-root скрипт doinst.sh
8. Установите ему права на выполнение, запустите, после чего удалите его.
9. Повторите пункты 5-9 для остальных пакетов (tcplay и Multipath tools)
Готово!

Теперь обратно нужно собрать главный файл, выходим из директории squashfs-root на уровень выше и выполняем команду:
mksquashfs squashfs-root puppy_slacko_5.5.sfs
Размер полученного нового главного файла увеличился примерно на 9 мегабайт, и приблизительно мегабайт на 15 увеличится, если добавить туда отсутствующий из коробки mc и обновить некоторые плагины к Firefox.
Готовые главные файлы

Puppy_slacko_5.5.sfs (PAE)
Puppy_slacko_5.5.sfs (non-PAE, 4G)

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/327863.html
Прокомментировать заметку можно по ссылке выше.

tcplay в Puppy Slacko 5.5 (Rus). Краткая инструкция по установке и другие заметки.

tcplay в PuppyRus Slacko 5.5. Краткая инструкция по установке и другие заметки.

I. Установка

1. Скачиваем и последовательно устанавливаем:
— пакет поддержки LVM: lvm2-2.02.96-i486-4 (скачать с mega.nz) (скачать с Google Drive)
— tcplay: tc-play-2.0-i486-1 (скачать с mega.nz) (скачать с Google Drive)
— multipath tools: multipath-tools-0.5.0-i486 (скачать с mega.nz) (скачать с Google Drive). Этот пакет самому tcplay не нужен, но используется для получения доступа к разделам зашифрованного диска/контейнера, если в нем несколько разделов.
— модули ядра: для версии PAE (скачать с mega.nz) (скачать с Google Drive)
для версии без PAE (скачать с mega.nz) (скачать с Google Drive)
Для других версий Puppy модулей нет, как сделать — описано тут
2. Перезагружаемся (естественно, файл сохранения должен быть, иначе чуда не получится).
3. Добавляем в автозагрузку /bin/tcplay-mod
— либо создав символическую ссылку на /bin/tcplay-mod в /root/Startup (но тогда tcplay будет корректно работать только при загрузке X)
— либо дописав строчку /bin/tcplay-mod в /etc/rc.d/rc.local и установив rc.local права на исполнение
— либо вместо добавления в автозагрузку /bin/tcplay-mod можно указать запуск нужных модулей в BootManager, как это описано тут.
4. Заново перезагружаемся. После перезагрузки tcplay должен работать корректно
II. Подключение контейнера. Пример команд и вывода.

# losetup -f
/dev/loop2
# losetup /dev/loop2 /mnt/sdb1/test.disk
# tcplay --map=test --device=/dev/loop2
Passphrase:
All ok!
# mkdir /mnt/test
# mount -t ext2 /dev/mapper/test /mnt/test

Подробно, как работать с файлами-контейнерами tcplay описано тут
III. Отключение контейнера. Пример команд.
# umount /mnt/test
# tcplay --unmap=test
# losetup -d /dev/loop2
IV. «Лишние» диски в Puppy

При подключении контейнера tcplay на рабочем столе могут появиться «лишние» диски с названиями вроде dm-0:

Так вот, не нужно их трогать и открывать, потом могут возникнуть проблемы с отключением, точнее отмонтированием зашифрованного диска.
Чтоб глаза не мозолили, их можно убрать, щелкнув по ним правой кнопкой и выбрав пункт «Удалить объект(ы)»

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/317718.html
Прокомментировать заметку можно по ссылке выше.

Чиним поддержку криптографии и ошибку при запуске tcplay в Puppy Slacko 5.5. Часть I.

Также возможно этот способ применим для любых урезанных дистрибьютивов, в т.ч. Live. К Puppy Slacko способ применим до последней (еще не русифицированной) версии, разработчики, раздолбаи, так до сей поры косяк и не поправили
Преамбула
На некоторых дистрибьютивах, при попытке подключения зашифрованного контейнера tcplay/TrueCrypt наблюдается следующая ошибка. tcplay вместо сообщения All ok! выдает ошибку:
device-mapper: reload ioctl on test failed: No such file or directory
При этом в логах, в сообщениях ядра присутствуют следующие записи:
Jul 26 23:18:43 puppypc15732 user.err kernel: [ 177.144795] device-mapper: table: 253:0: crypt: Error allocating crypto tfm
Jul 26 23:18:43 puppypc15732 user.warn kernel: [ 177.144798] device-mapper: ioctl: error adding target to table

Это значит, что в системе отсутствуют модули поддержки криптографии, необходимые tcplay либо TrueCrypt (оба используют системные библиотеки поддержки криптоалгоритмов), причем интересно, что в случае с tcplay шифрование проходит нормально, таким образом tcplay работает как настоящий разведчик. 🙂 Шифрует (донесения в Центр), а расшифровать не может.
Если же после установки tcplay при запуске случилась ошибка
tcplay: error while loading shared libraries: libdevmapper.so.2: cannot open shared object file: No such file or directory.
значит, в системе отсутствует поддержка lvm. Как ее установить, читайте здесь.
Попытаемся это починить. Собственно, способов починить есть два:
1. Собрать нужные криптографические модули и загрузить их
2. Пересобрать ядро с поддержкой криптографии (об этом позже).
Рассмотрим первый способ, на примере PuppyRus Slacko 5.5.
Read more…

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/317479.html
Прокомментировать заметку можно по ссылке выше.

Установка поддержки lvm для tcplay.

На некоторых урезанных live или frugal дистрибьютивах отсутствует поддержка LVM2, что при запуске на таких дистрибьютивах tcplay приводит к ошибке:
tcplay: error while loading shared libraries: libdevmapper.so.2: cannot open shared object file: No such file or directory.
Т.е. tcplay не может найти одну из необходимых ему библиотек. Библиотека присутствует в составе LVM2, и лучше установить весь пакет поддержки LVM.
Для Puppy Slacko помогает установка этого пакета (скачать с mega.nz) (скачать с Google Drive).
Для других дистрибьютивов, или если вы хотите версию пакета посвежее, можно скачать и собрать его из исходников, которые можно взять здесь.

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/317264.html
Прокомментировать заметку можно по ссылке выше.

tcplay, замена TrueCrypt для Linux. Работа с криптоконтейнерами. Часть II.

Часть II. Работа с простыми томами.
0. Создание простого тома tcplay/truecrypt
Команда для шифрования тома:

tcplay --create --device=/dev/loopX --cipher=шифр_или_каскад_шифров_через_запятую --pbkdf-prf=алгоритм --keyfile=path/to/key/file

где:
--create – указание программе создать новый шифрованный том
--device=/dev/loopX – устройство, которое требуется зашифровать, в данном случае loop-устройство с которым ассоциирован файл-контейнер.
--cipher=шифр_или_каскад_шифров_через_запятую – указание, какой алгоритм шифрования необходимо использовать, или же необходимо использовать несколько алгоритмов последовательно (они перечисляются через запятую). В настоящий момент tcplay поддерживает алгоритмы: AES-256-XTS, TWOFISH-256-XTS, SERPENT-256-XTS, таким образом, поддерживаются комбинации этих трех, двух, или одного из этих шифров, перечисленных через запятую.
В случае использования только одного из них – запятая после его указания не нужна.
Примечание: Если вы используете несколько шифров, особенно на слабой машине, то это может существенно замедлить работу компьютера. Из всех перечисленных шифров AES самый быстрый (на современных машинах он даже поддерживается на аппаратном уровне), но TWOFISH и SERPENT надежнее, хотя и медленнее.
--pbkdf-prf=алгоритм – алгоритм формирования ключа для шифрования на основе пароля. На самом деле, содержимое нашего ключевого файла тоже пароль, «ключ» в криптографии это несколько иное, но, поскольку объяснить вам всю криптографию в трех словах я не могу, отсылаю к специализированным источникам.
Кратко прочесть про PBKDF можно здесь
Вместо алгоритм надо подставить конкретный алгоритм. На данный момент tcplay поддерживает RIPEMD160, SHA512, whirpool
--keyfile=path/to/key/file – указание программе, где взять ключевой файл для шифрования. Если нужно использовать несколько ключевых файлов, то нужно указать несколько параметров --keyfile=, например:
tcplay --create --device=/dev/loop0 --cipher= TWOFISH-256-XTS --pbkdf-prf= RIPEMD160 --keyfile=/path/to/key/file01 --keyfile=/path/to/key/file02
Если ключевой файл не нужен, а достаточно пароля, вводимого с клавиатуры, параметр --keyfile не указывается. Пароль будет запрошен перед шифрованием.
Итак, предположим, что контейнер ассоциирован с устройством /dev/loop0, в качестве алгоритма шифрования мы выбрали один – AES-256, в качестве алгоритма PBKDF выбран whirlpool, а ключ находится в /keys/keyfile
Тогда команда приобретает вид:
tcplay --create --device=/dev/loop0 --cipher=AES-256-XTS --pbkdf-prf= whirlpool --keyfile=/keys/keyfile

Можно также добавить ключ --insecure-erase, тогда процесс пройдет быстрее, т.к. будет произведено затирание данных на диске. Поскольку я параноик, и в незашифрованном виде на диске ничего не храню, а свежий файл-контейнер представляет собой гигабайт нулей, то я смело его добавлю:
tcplay --create --device=/dev/loop0 --cipher=AES-256-XTS --pbkdf-prf= whirlpool --keyfile=/keys/keyfile –-insecure-erase

После ввода команды и нажатия Enter, нам предложат ввести парольную фразу и повторить ее. Если хочется кроме ключевого файла установить еще и пароль (или ключевой файл вообще не нужен), то вводим пароль и подтверждаем его, если указан ключевой файл, а пароль не нужен, жмем два раза Enter.
Далее попросят подтвердить свои действия, если все сделано правильно – отвечаем утвердительно, после чего нужно будет некоторое время подождать, пока tcplay не сгенерирует т.н. истинно-случайные числа и не завершит шифрование.
В конце процесса нам скажут All Done!, если так, значит шифрование файла-контейнера окончено.
Read more…
Начало.
Продолжение следует.

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/316433.html
Прокомментировать заметку можно по ссылке выше.

tcplay, замена TrueCrypt для Linux. Работа с криптоконтейнерами. Часть I.

И просто краткие заметки от склероза.
Часть I. Общие положения.
0. Зачало.
TrueCrypt уже довольно давно почил, однако добрые люди не оставили в беде параноика и начинающего линуксоида в одном лице и форкнули создали независимую реализацию замечательного проекта. TCplay представляет собой утилиту командной строки (для Linux), поддерживающую все основные функции TrueCrypt – создание томов-криптоконтейнеров, открытие контейнеров, созданных в TrueCrypt, создание скрытых шифрованных разделов на томе с обычным шифрованным разделом, поддержку ключевых файлов и т.д.
1. Установка.
1.1. Устанавливаем src2pkg [копия статьи] с помощью installpkg (если не установлена)
1.2. Качаем исходники tcplay
1.3. В каталоге со скаченным архивом выполняем
src2pkg -C tc-play-2.0.tar.gz
и после завершения процесса получаем пакет slackware, который устанавливаем с помошью installpkg
2. Всякие мелочи

tcplay –v
или tcplay –-version – версия программы
tcplay –h или tcplay –-help или запуск без параметров – справка.
3. О генерации ключевых файлов.
Вообще, tcplay, как и TrueCrypt в качестве ключевых файлов может использовать любой файл, точнее первый его мегабайт. Так что генерировать ключевые файлы большего размера смысла не имеет. Конечно, нежелательно использовать в качестве ключевых файлов системные файлы, фотографии своего любимого кота, тещи или Джиллиан Андерсон и т.д. Есть вероятность, что злоумышленник подберет, а уж при использовании системных файлов вероятность близка к 100%.
Простейший способ сгенерировать ключевой файл – воспользоваться командой dd и устройством /dev/random
dd if=/dev/random of=/путь/к/файлу/имя_файла bs=1 count=256
Данная команда сгенерирует ключевой файл размером 256 байт.
Команда dd подробно описана, например, здесь копия
4. Подготовка файла-контейнера.
Чтобы создать новый файл-контейнер (неважно, содержащий лишь один обычный том TrueCrypt или же обычный и скрытый) нам понадобится файл нужного размера, создать его также можно при помощи команды dd:
dd if=/dev/zero of=/path/to/file/disk01.crypt bs=1024M count=1
Команда создаст файл размером 1 Гб (1024 Мб) заполненный нулями, естественно, /path/to/file/disk01.crypt нужно заменить на путь к файлу-контейнеру.
5. Представляем файл-контейнер в виде блочного устройства.
Далее, нужно сделать так, чтобы система представила созданный файл-контейнер в виде блочного устройства, проще говоря, смогла работать с ним, как с диском, для чего нужно «повесить» наш файл на петлевое устройство loop
Для начала определим первое свободное петлевое устройство:
losetup -f
В моем дистрибьютиве loop-устройства ничем не использовались, поэтому команда выдала
/dev/loop0
В других дистрибьютивах может быть и не loop0, например, дистрибьютивы Puppy Linux при загрузке занимают первых два (0 и 1) петлевых устройства, на одном из которых висит основной образ ОС, а на втором файл пользовательской сохраненки.
Вешаем файл-контейнер на свободное петлевое устройство:
losetup /dev/loop0 /path/to/file/disk01.crypt
первый параметр команды – петлевое устройство, второй – путь к файлу-контейнеру.
Продолжение

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/316329.html
Прокомментировать заметку можно по ссылке выше.