Cryptsetup – шифруем съемный HDD

Установим cryptsetup.

apt-get install cryptsetup
sudo modprobe dm-crypt

Создадим файл-ключ с помощью которого будем шифровать винт и сделаем его дубликат (на всякий случай)

dd if=/dev/random of=/key.bin bs=32 count=1

cp /key.bin /home/key.bin

Для начала нам нужно забить наш винт полностью случайными данными. Это делается для того чтобы невозможно было определить в каких секторах находятся ваши данные и сколько места они занимают, грубо говоря весь винт открытый в HEX-редакторе, должен выглядеть равномерно забитым несвязным мусором, вне зависимости от количества вашей информации.

dd if=/dev/urandom of=/dev/sdb bs=2M

Теперь, когда поверхность диска заполнена, пора его зашифровать. Для этого воспользуемся технологией LUKS.

cryptsetup -h=sha256 -c=aes-cbc-essiv:sha256 -s=256 luksFormat /dev/sdb /key.bin

Вас предупредят об уничтожении данных, для подтверждения нужно написать YES(большими буквами).

Подключаем шифрованный диск:

cryptsetup -d=/key.bin luksOpen /dev/sdb cryptdisk

mkfs.ext4 /dev/mapper/cryptdisk

mount /dev/mapper/cryptdisk /mnt/remotedisk

Для автоматического добавления устройства после перезагрузки (не проверено)

blkid

/dev/sda1: UUID="e89bf036-2b2d-46b5-a8c6-77134207bb6e" TYPE="ext4"

/dev/sda5: UUID="4af9e66f-6495-462b-a50f-4700a72bbbb3" TYPE="swap"

/dev/sdb: UUID="5017d540-4f76-43e7-b0cf-e8736eb43bef" TYPE="crypto_LUKS"

nano /etc/crypttab

drivespace UUID=5017d540-4f76-43e7-b0cf-e8736eb43bef /key.bin luks,cipher=aes-cbc-essiv:sha256

или

drivespace /dev/sdb /key.bin luks,cipher=aes-cbc-essiv:sha256

если надо

nano /etc/fstab
dev/mapper/cryptdisk /mnt/remotedisk ext4 defaults 0 1

Подключение зашифрованного диска

apt-get install cryptsetup

ложим ключь в папку /usr/local/etc/key.bin

копируем файл подключения диска при загрузке системы /etc/udev/rules.d/20-usbflash.rules

его содержимое:(две строки, ATTRS{serial} узнаем из команды lsusb -v)

ACTION=="add", SUBSYSTEM=="block", ATTRS{serial}=="574343315430313931333533", SYMLINK="usbdisk", RUN+="/bin/bash -c '/bin/cat /usr/local/etc/key.bin | /sbin/cryptsetup -c twofish-cbc-essiv:sha256 create cryptpart /dev/usbdisk'"

ACTION=="remove", SUBSYSTEM=="block", ATTRS{serial}=="574343315430313931333533", RUN+="/bin/bash -c '/bin/umount -f /dev/mapper/cryptpart; /sbin/cryptsetup remove cryptpart'"

Скрипт для слива бэкапа на съемный HDD

nano /home/scripts/backup.sh

#!/bin/bash

#################MAIN PARAMETERS FOR BACKUP####

backupobject="/home/data/backups"

backupdst="/mnt/remotedisk/backup"

logfile="/var/log/cryptbackup.log"

arh_base="/home/data/backups/bases/archive"

backupdst_arh="/mnt/remotedisk/backup/backups/bases/archive"

#################/MAIN PARAMETERS FOR BACKUP####

echo "`date +%d_%m_%Y:%T` ::backup system was RUN ==================================================================>" >> $logfile

copy(){

#cp -rp $backupobject $backupdst/ 2>> $logfile

rsync -rltzp --delete --size-only --exclude="bases/archive" --exclude="bases/archive_new" $backupobject $backupdst/ 2>> $logfile

find $backupdst_arh/ -mtime +2 -exec rm -f {} \;

find $arh_base/ -maxdepth 1 -name "*.gz" -mtime -1 -exec cp -rp {} $backupdst_arh \;

sleep 10

umount -f /dev/mapper/cryptpart

}

if [ -L /dev/mapper/cryptpart ]; then

if mount |grep cryptpart >/dev/null; then

copy

umount -f /dev/mapper/cryptpart

else

mount /dev/mapper/cryptpart /mnt/remotedisk 2>> $logfile

copy

umount -f /dev/mapper/cryptpart

fi

else

echo 'Error! Crypt device not exist' >> $logfile

fi

echo "`date +%d_%m_%Y:%T` ::backup system was STOP =================================================================>" >> $logfile

nano /etc/crontab
10 2 * * * /root/scripts/crypt_backup.sh