LINUX.ORG.RU

Шифрование разделов


0

0

Есть хард с lvm. Возможно ли зашифровать его полностью, без создания всех разделов заново? Или хотя бы по частям, не копируя все данные на другой диск?


с luks не получится, потому что ему нужны дополнительные несколько секторов для своего header'а. Но простым cryptsetup -- запросто

1) размонтируем все разделы на подопытном диске (пусть будет /dev/sdb)

2)
cryptsetup --verify-passphrase --verbose --hash=sha256 --cipher=aes-cbc-essiv:sha256 --key-size=256 create crypteddisk /dev/sdb

3) прогоняем скриптик вроде этого (я не тестировал, возможны очепятки с арифметикой)

#!/bin/bash
buffersize=1024
size=$(expr $(grep sdb /proc/partitions|grep -v sdb[0-9]|awk '{print $3}') "*" 2 "/" $buffersize)
declare -i n=0

while [ $n -le $size ]; do
    dd if=/dev/sdb of=/dev/shm/buffer count=$buffersize skip=$(expr $n "*" $buffersize)
    dd if=/dev/shm/buffer of=/dev/mapper/crypteddisk count=$buffersize seek=$(expr $n "*" $buffersize)
    n=n+1
done

4)
cryptsetup remove crypteddisk

pupok ★★
()
Ответ на: комментарий от pupok

потестировал скрипт, вот так лучше

1) размонтируем все разделы на подопытном диске (пусть будет /dev/sdb)

2) сохраняем следущий скрипт в /tmp/crypting

#!/bin/bash 
buffersize=1024
declare -i n=0
printed=0
if [ -z "$1" ]; then
    echo Usage: $0 disk
    echo where /dev/disk is a block special device
    exit 1
fi
disk=$(basename $1)

if [ ! -b /dev/$disk ]; then                            
    echo $disk is not a block device                    
    exit 1                                              
fi                                                      
size=$(expr $(cat /sys/block/$disk/size) "/" $buffersize)
                                                        
if [ -a /dev/mapper/crypteddisk ]; then
    echo /dev/mapper/crypteddisk already exists
    exit 1
fi
cryptsetup --verify-passphrase --verbose --hash=sha256 --cipher=aes-cbc-essiv:sha256 --key-size=256 create crypteddisk /dev/$disk

while [ $n -le $size ]; do
    dd if=/dev/$disk of=/dev/shm/buffer count=$buffersize skip=$(expr $n "*" $buffersize) 2>/dev/null
    dd if=/dev/shm/buffer of=/dev/mapper/crypteddisk count=$buffersize seek=$(expr $n "*" $buffersize) 2>/dev/null
    echo -n .
    new=$(expr $n "*" 10 "/" $size); if [ $printed != $new ]; then echo -n $(expr $new "*" 10)"%"; fi; printed=$new
    n=n+1
done
echo
sync
cryptsetup remove crypteddisk
rm /dev/shm/buffer

3) запускаем и ждём, возможно пару часов если диск большой
bash /tmp/crypting sdb

4) в /etc/crypttab добавляем строчку
crypteddisk /dev/sdb none hash=sha256,cipher=aes-cbc-essiv:sha256,loud

pupok ★★
()

Класс, спасибо. Почитаю пока по lvm и dm-crypt. Ведь использовать crypto loop с lvm на нескольких физических разделах смысла нет?

alex4
() автор топика
Ответ на: комментарий от alex4

> Ведь использовать crypto loop с lvm на нескольких физических разделах смысла нет

cryptoloop и dm-crypt -- это разные вещи. Но даже авторы cryptoloop советуют использовать dm-crypt (cryptsetup в моём скрипте -- это просто обёртка для dm-crypt). А вообще lvm2 по-барабану на скольки физических дисках расположены части логического volum'а, и с добавлением шифрования как я описал тебе даже настройки не прийдётся особо менять -- просто везде где у тебя в конфигах прописан /dev/sdb замени его на /dev/mapper/crypteddisk

pupok ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.