Работа с зашифрованными дисками при помощи Calculate Access

Обновлено 13 марта 2019

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

Создание шифрованного раздела

Создайте директорию /root/cryptdata и подготовьте файлы заголовка шифрованного раздела и ключа шифрования:

mkdir /root/cryptdata

dd if=/dev/zero of=/root/cryptdata/header bs=2M count=1
1+0 записей получено
1+0 записей отправлено
2097152 bytes (2.1 MB, 2.0 MiB) copied, 0.00229696 s, 913 MB/s
dd if=/dev/urandom of=/root/cryptdata/key count=1 bs=2048
1+0 записей получено
1+0 записей отправлено
2048 bytes (2.0 kB, 2.0 KiB) copied, 0.00050282 s, 4.1 MB/s

Добавьте шифрование к разделу:

cryptsetup luksFormat --header /root/cryptdata/header /dev/sda5 /root/cryptdata/key
WARNING!
========
This will overwrite data on /root/cryptdata/header irrevocably.

Are you sure? (Type uppercase yes): YES

Вместо /dev/sda5 укажите раздел, подлежащий шифрованию. Подтвердите действие, набрав "YES" заглавными буквами.

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

cryptsetup --header /root/cryptdata/header -d /root/cryptdata/key luksOpen /dev/sda5 sda5_crypt

Вместо sda5_crypt и /dev/sda5 используйте свои значения.

Отформатируйте раздел:

mkfs.ext4 /dev/mapper/sda5_crypt

Настройка сервера ключей

Для первоначальной настройки сервера ключей установите пакет sys-apps/calculate-access с включенным USE-флагом server.

echo sys-apps/calculate-access server >> /etc/portage/package.use/custom

emerge calculate-access

Инициализируйте сервис, выполнив:

cl-access-setup
Access configured successful in /var/calculate/access!

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

На системе с шифрованным разделом установите пакет sys-apps/calculate-access:

emerge calculate-access

Сгенерируйте ssh-ключ для подключения к серверу ключей:

ssh-keygen -f /var/lib/calculate/access_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/calculate/access_key.
Your public key has been saved in /var/lib/calculate/access_key.pub.
The key fingerprint is:
SHA256:XFT3YqCScoAFeLmnzpfDO5BWSKiRQAKOcDkSHFBitT0 root@calculate
The key's randomart image is:
+---[RSA 2048]----+
|#B==.=o   ..o .  |
|X+= B  . o . o . |
|.= = E. + o   o .|
|.   o ++ o   . . |
|     =  S        |
|    =            |
|   + o .         |
|    o *          |
|     ..+         |
+----[SHA256]-----+

Важно

Не задавайте пароль на закрытый ключ, иначе вы не сможете автоматически подключаться к сервису

Настройте параметры подключения к серверу хранения ключей:

/etc/conf.d/access

# List of access hosts, separated by a space
# You can define your host in several ways:
#   'example.org'       - access@example.org port 22
#   'example.org:200'   - access@example.org port 200
#   'user@1.2.3.4:333'  - user@1.2.3.4 port 333
ACCESSHOST="access.example.org"

# Path to the private SSL-key file for connection to the access host
# The key must be accessible without a password
KEYFILE=/var/lib/calculate/access_key

# Connection timeout (in seconds)
CONNECT_TIMEOUT=20

# Maximum number of retries before disallowing access, -1 - infinity
RETRY=5

Вместо access.example.org укажите адрес сервера ключей. В случае указания нескольких серверов ключей службка access будет обращаться к ним по очереди, в порядке указания.

Добавьте открытый ключ сервера ключей:

/etc/init.d/access add_hostkey
access | Permanently added 'access.verevo.calculate.ru,10.3.0.4' (ECDSA) to the list of known hosts.

Перенесите на сервер ключей файл с заголовком раздела /root/cryptdata/header, ключ шифрования /root/cryptdata/key и открытый ключ подключения /var/lib/calculate/access_key.pub:

scp /root/cryptdata/{header,key} /var/lib/calculate/access_key.pub root@access.example.org:/root
Password: 
header                              100% 2048KB  60.1MB/s   2.0MB/s   00:00    
key                                 100% 2048     3.3MB/s   2.0MB/s   00:00    
access_key                          100% 1675     2.4MB/s   2.0MB/s   00:00 

Вместо access.example.org укажите адрес сервера ключей.

Добавьте данные шифрованного раздела на сервере ключей:

cl-access-add --id client1 --ssh-key /root/access_key.pub --header /root/header --key /root/key --device da958374-f891-4280-8c15-6e20b6cdd8f7 --mount /var/calculate
* All OK!

Вместо client1 укажите имя сервера зашифрованного раздела. PARTUUID устройства можно узнать, выполнив на клиенте:

blkid -s PARTUUID /dev/sda5
/dev/sda5: PARTUUID="da958374-f891-4280-8c15-6e20b6cdd8f7"

Проверьте на клиенте, что сервер возвращает необходимые данные:

/etc/init.d/access check
access            | * Host: access.example.org ...                           [ ok ]

Смонтируйте шифрованный раздел:

/etc/init.d/access start
access            | * Caching service dependencies ...
access            | * Starting access ...
access            | * Host: access.example.org ...                           [ ok ]

Добавьте монтирование шифрованного раздела в автозагрузку:

rc-update add access

Не забудьте сделать копию директории /root/cryptdata на флешке, после чего удалите директорию с ключами:

rm -r /root/cryptdata