Как шифровать системный раздел и сделать загрузочную флешку 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
-сигнала корректно завершить работу и ничего не попортить, как они делают с разделами на системном диске
ФАНФАРЫ!