Сказ о том как я подготавливал защищенную версию MiniOS для запуска с Rutoken ЭЦП 2.0 Flash 32Gb и работы с электронной подписью
MiniOS — легкий модульный дистрибутив Linux на базе Debian, предназначенный для работы с USB-накопителями. Он предлагает формат модулей SB, которые позволяют пользователям настраивать и конфигурировать систему под свои нужды. Утилиты apt2sb и script2sb обеспечивают простоту создания и управление пакетами, а также автоматизацию процессов, что значительно упрощает взаимодействие с дистрибутивом.
Возможность работы с read-only (RO) разделами позволяет обеспечить безопасность защищая ее от нежелательных изменений.
Для токенов существует РОСА Барий, однако бесплатная версия ограничена и не так интересна как ее платная версия, подробнее можно ознакомиться тут.
Рутокен ЭЦП 2.0 Flash объединяющий в себе полноценный СКЗИ и управляемый контроллером защищенный раздел flash памяти. В моем случае токен на 32ГБ без сертификатов, разделенный на 2 раздела, Read-only для системы и скрытый раздел для хранения данных. Если у вас комплект Рутокен Диск то данное руководство уничтожит установленный Рутокен Диск. Подробнее можно узнать в характеристиках на сайте производителя.
Используемое ПО на момент подготовки статьи:
MiniOS Standart 64бит 4.1.2 с ядром 6.1 (Можно использовать вариант Ultra, потребуется установить меньше ПО, только необходимое для работы с токеном. Формат системы Ultra и toolbox поддерживают secure boot из коробки, выбор за вами. Я буду менять ядро для варианта Standart с поддержкой secure boot. )
Драйверы Рутокен для Windows 4.21.0.0
Для Linux потребуются libccid pcscd и libpcsclite1
Библиотека PKCS#11 rtPKCS11ecp для GNU/Linux DEB 64-bit (x64) 2.17.5.0
Подготовим токен, подготовку произвожу под Windows 10, для Linux команды идентичные.
Скачаем rtadmin3.1 с сайта производителя, драйвера Рутокен для Windows, установим их, распакуем rtadmin перейдем к файлу rtadmin, откроем консоль cmd в директории rtadmin3.1
Подключим токен и выведем список подключенных токенов:rtadmin list-tokens
Выведем информацию о токене командой:
rtadmin info
Важное уточнение info выведет информацию если подключен один токен, если их несколько необходимо использовать фильтр “-s” или “-e” или глобальный параметр –parallel который выполнит команды на всех подключенных токенах.
-s – отобразить информацию только по токену с указанным серийным номером.
-e – исключить из отображения указанные серийные номера.
Отформатируем токен командой:
rtadmin format -r --pin-change-policy both --min-so-pin 8 --min-user-pin 8 --max-so-pin-retry-count 3 --max-user-pin-retry-count 5
Разберем команду:
format -r(repair) – форматирует токен без запроса пароля, т.е. принудительно, все данные стираются.
pin-change-policy - сообщает кто может менять пин код пользователя, доступны both, so и user. both - разрешит всем, so - только администратору, user - только пользователю.
min-so-pin и min-user-pin – отвечает за минимальную длинную пин-кода администратора и пользователя соответственно.
max-so-pin-retry-count и max-user-pin-retry-count – отвечают за количество неверно введенных пин-кодов, если превысить значение, пин-код блокируется, в случае пользовательского пин-кода его можно сбросить через администратора, если заблокировать пин-код администратор то поможет только повторное форматирование токена с потерей данных, ключ -r.
Разблокировать пользователя и все локальные пин-коды можно командой:rdadmin unblock-pins -P console
Потребуется пин администратора.
До полной настройки токена продолжу с дефолтными пин-кодами, для администратора 87654321 и для пользователя 12345678, в дальнейшем можно поменять стандартные пин-коды через приглашение консоли без явного раскрытия нового пин-кода:
rtadmin set-so-pin -P -p 87654321 -N console
rtadmin set-user-pin -P -p 12345678 -N console
Разберем команды:
set-so-pin – устанавливаем пин администратора
-P – способ ввода пин-кода
-p – позволяет явно указать пин-код в команде
-N console – вызывает приглашение ввода нового пин-кода, если указать generate то пин будет сгенерирован.
set-user-pin – установим пин-код пользователя.
Установим метку токена командой
rtadmin set-label -P console -l MyRutoken
Создадим локальные пин-коды для раздела с будущей системой и скрытого раздела с данными:rtadmin create-local-pin -P -p 12345678 -N -p 87654321 -i3
rtadmin create-local-pin -P -p 12345678 -N -p 12345678 -i4
На данном примере создали пин-коды по аналогии со стандартными, i3 – администратор раздела с системой, i4 – пользователь скрытого раздела, после настройки изменим пин-коды командами:rtadmin set-local-pin -P -p 87654321 -N console -i3
rtadmin set-local-pin -P -p 12345678 -N console -i4
Отформатируем flash токена, разделим на два раздела и присвоим права/владельца командой:
rtadmin format-drive -P console --volume 8192:rw:local-3 --volume 21650:h:local-4
Разберем команду:
format-drive – применятся только на устройствах с флеш памятью.
-P console – приглашение ввода пин-кода администратора через консоль.
--volume – размер раздела в Мб.
rw – чтение и запись, доступны h – скрытый, r – чтение, cd – эмуляция CD-ROM.
local-3 – устанавливаем владельца для раздела с системой ранее созданный пин-код i3.
local-4 – устанавливаем владельца для скрытого раздела с данными ранее созданный пин-код i4.
После выполнения команды, будет доступен один раздел RW, в который распакуем образ MiniOS.
После распаковки внесем правки в файл minios/minios.conf
USER_NAME=”live” – устанавливает имя пользователя.
USER_PASSWORD=”userpassword” – устанавливает пользовательский пароль.
ROOT_PASSWORD=”myrootpassword” – устанавливает пароль root.
HOST_NAME=”minios-rt” – изменяем имя системы.
LOCALES=”ru_RU.UTF-8” – включим русский язык в системе.
TIMEZONE=”Europe/Moscow” – установим часовой пояс.
KEYBOARD_LAYOUT="us,ru" – установим Английскую и Русскую раскладку клавиатуры.
Важное замечание, пароли хранятся в открытом виде, здесь можно прочитать подробнее о файле конфигурации, второй нюанс который выявил, неправильно становится локализация, поправим в отдельном модуле.
Определимся с уровнями/слоями: базовые уровни с 00 по 02, позволят запустить систему без GUI, с 03 по 04 необходимое для запуска графической оболочки XFCE, на 05 уровне по умолчанию в Standart находится Firefox.
Начнем собирать нашего франкенштейна с 06 уровня. Все последующие уровни собираются над 04, за исключением конкретного случая далее.
Загружаемся с подготовленной флешки в Live режиме MiniOS, собираем модули:
Начнем со смены ядра mos которое по умолчанию в версии Standart на ядро с поддержкой Secure Boot:
Выполним sudo minios-kernelpack
Откроется список доступных ядер, нам необходимо выбрать стандартное ядро Debian, на момент написания 6.1.0-35-amd64
Ждем завершения, в директории выполнения будет три файла, 1 - initrfs*.img 2 - vmlinuz* и 3 - модуль с ядром 01-kernel-*-amd64.sb, копируем на флешку и перезагружаемся, в основную систему.
Есть два пути замены ядра, переименовываем файлы в initrfs.img и vmlinuz соответственно, и копируем с заменой в "ваша флешка"/minios/boot/, либо копируем с текущим названием в /minios/boot/ и редактируем syslinux.cfg, заменяя в файле initrfs.img и vmlinuz на ваши.
Копируем модуль ядра в /minios/, перезагружаемся с флешки для подготовки модулей с ПО.
Уровень 06, тот самый фикс локали:
Выполняем: sudo chroot2sb -l 4 -n 06-locale-ru.sb
У нас откроется окружение chroot, выполним последовательно:locale-gen en_US en_US.UTF-8 ru_RU ru_RU.UTF-8
dpkg-reconfigure locales
Откроется меню выбора локали, выберем ru_RU.UTF-8 и en_US.UTF-8, по умолчанию установим RU.
Настроим раскладку клавиатуры:
Выполняем sudo nano/etc/default/keyboard
И вносим правки, нам необходимо поменять XKBLAYOUT и XKBOPTIONS на:XKBLAYOUT="us,ru"
XKBOPTIONS="grp:alt_shift_toggle,grp_led:scroll"
Сохраняем файл, выходим из среды chroot командой exit
, она запустит сборку модуля, копируем модуль 06-locale-ru.sb на флешку и перезагружаемся в основную систему, копируем модуль в /minios/ через основную систему.
Подготовим скрипты для сборки основного ПО не связанного с токеном.
Создадим директорию для хранения скриптов и файлов например со следующей структурой:
APPS/ Основная директория в ней расположим следующие:
Автоматизирующий скрипт 00-autoinstall.sh
00-scripts/ для хранения скриптов установки
gost-rt/install/ для скрипта установки и архива с КриптоПРО
openssl-rt/install/ для rtengene и настроенного openssl для работы с ГОСТ шифрованием
99-files/ для любых ваших файлов, необходимо воспроизвести структуру, например
если пользователь стандартный live то файлы необходимо сохранить так:
99-files/home/live/ ваши файлы и директории
Создадим скрипт 00-autoinstall.sh:
#!/bin/sh
script2sb -s 00-scripts/07-apps.sh -l 6 -n 07-apps.sb
script2sb -s 00-scripts/08-aspia.sh -l 6 -n 08-aspia.sb
script2sb -s 00-scripts/09-codium.sh -l 6 -n 09-codium.sb
script2sb -s 00-scripts/10-office.sh -l 6 -n 10-office.sb
script2sb -s 00-scripts/11-v2rayn.sh -l 6 -n 11-v2rayn.sb
script2sb -s 00-scripts/12-pcsc.sh -l 6 -n 12-pcsc.sb
script2sb -s 00-scripts/13-chromium-gost.sh -l 6 -n 13-chromium-gost.sb
script2sb -s 00-scripts/99-files.sh -l 99 -n 99-files.sb -d 99-files/
Создадим файл 07-apps.sh со следующим содержимым:
#!/bin/sh
apt update
# Базовое ПО
apt install gparted wipe aria2 qdiskinfo grsync \
davfs2 hardinfo hexedit nmap uget gtkhash gdisk \
rsync smbclient whois zenmap transmission ncat telnet \
dmraid gpart jfsutils kpartx mtools reiser4progs reiserfsprogs udftools yelp -y
# ПО для шифрования
apt install keepassxc zulucrypt-gui zulumount-gui \
zulucrypt-cli zulumount-cli veracrypt -y
# Запись рабочего стола
apt install obs-studio -y
# Удаленный рабочий стол
apt install remmina remmina-plugin-rdp remmina-plugin-vnc -y
# VPN клиенты для удаленного подключения
apt install openvpn wireguard openconnect -y
# Поддержка VPN протоколов в Network Manager
apt install network-manager-openvpn network-manager-openconnect -y
# Видео проигрыватель
apt install vlc -y
# Плагины для Firefox
apt install webext-foxyproxy webext-privacy-badger \
webext-ublock-origin-firefox webext-keepassxc-browser -y
# XCA для управления УЦ
apt install xca -y
# Android утилиты
apt install adb fastboot android-file-transfer -y
# Устранение зависимостей и очистка перед сборкой
apt install -f
apt clean
apt autoclean
Выбор ПО обусловлен с необходимостью удаленно подключаться к рабочим процессам, использовать шифрованные контейнеры для хранения например паролей или конфигураций VPN для подключения.
Важное уточнение модули которые устанавливают deb пакеты, могут устареть, следите за обновлением ПО, и меняйте ссылки при необходимости.
Подготовим скрипт для установки клиента и консоли Aspia, назовем его 08-aspia.sh:
#!/bin/sh
apt update
wget -q --show-progress https://github.com/dchapyshev/aspia/releases/download/v2.7.0/aspia-client-2.7.0-x86_64.deb
wget -q --show-progress https://github.com/dchapyshev/aspia/releases/download/v2.7.0/aspia-console-2.7.0-x86_64.deb
dpkg -i ./aspia-client*.deb
dpkg -i ./aspia-console*.deb
rm *.deb -f
apt install -f
apt-get clean
apt-get autoclean
Установим открытый редактор кода VScodium, сохраним скрипт как 09-codium.sh:
#!/bin/sh
apt update
apt install xdg-utils -y
wget -q --show-progress https://github.com/VSCodium/vscodium/releases/download/1.100.23258/codium_1.100.23258_amd64.deb
dpkg -i ./codium*.deb
rm *.deb -f
apt install -f
apt-get clean
apt-get autoclean
На 10 уровне разместим libreoffice, сохраним скрипт как 10-libreoffice.sh:
#!/bin/sh
apt update && apt install libreoffice libreoffice-l10n-ru myspell-ru mythes-ru pdfarranger mupdf -y
apt install -f
apt-get clean
apt-get autoclean
Для тех кому может потребоваться современный протокол VPN установим v2rayN, сохраним как 11-v2rayn.sh:
#!/bin/sh
apt update
wget -O v2rayn.deb -q --show-progress https://github.com/2dust/v2rayN/releases/download/7.12.3/v2rayN-linux-64.deb
dpkg -i ./v2rayn.deb
rm *.deb -f
apt install -f
apt-get clean
apt-get autoclean
Настал уровень с базовым ПО для работы с токенами, сохраним как 12-pcsc.sh:
#!/bin/sh
apt update && apt install libccid pcscd libpcsclite1 pcsc-tools \
libengine-pkcs11-openssl ca-certificates opensc-pkcs11 opensc -y
apt install -f
apt clean
apt autoclean
Для сайтов с ГОСТ шифрованием установим Chromium-Gost, сохраним как 13-chromium-gost.sh:
#!/bin/sh
apt update
apt install fonts-liberation libvulkan1 xdg-utils -y
wget -O chromium-gost.deb -q --show-progress https://update.cryptopro.ru/get/chromium-gost/linux/amd64/deb
dpkg -i ./chromium-gost.deb
rm *.deb -f
apt install -f
apt-get clean
apt-get autoclean
Создадим скрипт заглушку 99-files.sh для корректной работы модуля script2sb:
#!/bin/sh
Создадим директорию для 99 модуля:mkdir -p 99-files/home/live
Поместим в нее следующие скрипты, для их работы нужен rtadmin3.1.
Первый назовем h-lock.sh для блокировки скрытого раздела:
#!/bin/sh
rtadmin set-volume-access-mode -P console --volume-id 2 --new-mode h --temp
Второй h-unlock.sh для временной разблокировки в режиме чтения:
#!/bin/sh
rtadmin set-volume-access-mode -P console --volume-id 2 --new-mode r --temp
Третий h-unlock-rw.sh для временной разблокировки с возможностью записи:
#!/bin/sh
rtadmin3.1/rtadmin set-volume-access-mode -P console --volume-id 2 --new-mode rw --temp
Четвертый скрипт временно переведет раздел с системой в режим записи
#!/bin/sh
rtadmin3.1/rtadmin set-volume-access-mode -P console --volume-id 1 --new-mode rw --temp
Ключ --temp работает до извлечения токена или перезагрузки, после токен скрывает скрытый раздел или переводит в режим чтения раздел, если изменения нужны постоянные - убираем ключ.
Так же разместим файл readme.md со следующим содержимым для удобства:
# Подключение по ssh через ключ на токене
ssh -I /usr/lib/librtpkcs11ecp.so <user>@<host> <-p port>
# Проверка ГОСТ TLS на сайте
https://tlsgost-256.cryptopro.ru/
https://tlsgost-512.cryptopro.ru/
# Cообщение если все ок: (Welcome to Crypto-Pro tls server! TLS connection with id-tc26-gost-3410-12-512-paramSetA no auth requred.)
# Ошибку сертификата игнорируем, необходим сертификат (Тестовый УЦ ООО "КРИПТО-ПРО"), страница не откроется при ошибке (ERR_SSL_VERSION_OR_CIPHER_MISMATCH)
# Проверка правильности установки PCSC
pcsc_scan
# Должен отобразить устройство Activ Rutoken
# Проверка доступности модуля для Рутокен
find /usr/*(lib|lib64) -name librtpkcs11ecp.so
pkcs11-tool --module {A} -T
# Проверка сертификатов на токене:
pkcs11-tool --module {A} -O
Подготовим модуль содержащий в себе библиотеки для работы с Рутокен и провайдер СКЗИ в виде КриптоПРО-CSP, важная ремарка, КриптоПРО платное ПО, если требуется весь его функционал приобретите лицензию, демо версия на 90 дней, для целей только поддержки ГОСТ шифрования — лицензия не требуется.
В директории gost-rt сохраним КриптоПРО и создадим файл скрипта в gost-rt/install/install.sh для установки библиотек для работы с Рутокен и плагин Госуслуг:
#!/bin/sh
# https://download.rutoken.ru/
apt update
apt install libusb -y
# Установим ПО для работы с Рутокеном, и плагин Госуслуг:
wget -q --show-progress https://ds-plugin.gosuslugi.ru/plugin/upload/assets/distrib/IFCPlugin-x86_64.deb
wget -q --show-progress https://download.rutoken.ru/Rutoken/PKCS11Lib/2.17.5.0/Linux/x64/librtpkcs11ecp_2.17.5.0-1_amd64.deb
wget -q --show-progress https://download.rutoken.ru/Rutoken_Plugin/4.10.1.0/Linux/libnpRutokenPlugin_4.10.1-1_amd64.deb
wget -q --show-progress https://download.rutoken.ru/Rutoken/Control_Center/0.2.0/x86_64/rtcontrolcenter_0.2.0-1_amd64.deb
wget -q --show-progress http://download.rutoken.ru/Rutoken_Connect/Current/Linux/x64/rtconnect-6.1.1-1_amd64.deb
dpkg -i ./IFCPlugin*.deb
dpkg -i ./rtconnect*.deb
dpkg -i ./librtpkcs11ecp*.deb
dpkg -i ./libnpRutokenPlugin*.deb
dpkg -i ./rtcontrolcenter*.deb
# Установим утилиту администрирования Рутокен:
wget -q --show-progress http://download.rutoken.ru/Rutoken/Utilites/rtAdmin/3.1/Linux/glibc-x86_64/rtadmin
mv rtadmin /usr/local/bin/rtadmin
chmod +x /usr/local/bin/rtadmin
# Установим КриптоПро. Как минимум, должны быть отмечены для установки пакеты:
# KC1 Cryptographic Service Provider ( провайдер КС1)
# GUI dialog components (библиотека графического БиоДСЧ)
# Smart Card and Token support modules (пакет поддержки носителей и смарт-карт)
# cptools, GUI application for... - (Панель "Инструменты КриптоПро" с графическим интерфейсом - если устанавливается CSP 5.0)
tar -xf linux-amd64_deb.tgz && ./linux-amd64_deb/install_gui.sh
# Устанавливаем без указания лицензии.
# Очистим
rm -f *.deb
apt install -f
apt-get clean
apt-get autoclean
Теперь подготовим необходимое для поддержки ГОСТ шифров в openssl через библиотеку rtengine, в директории openssl-rt/install/ создадим скрипт install.sh со следующим содержимым:
#!/bin/sh
# https://download.rutoken.ru/
apt update
# Подготовим rtengine
wget q --show-progress https://download.rutoken.ru/Rutoken/Support_OpenSSL/Current/rtengine-3.3.1.zip
unzip rtengine-3.3.1.zip
dpkg -i ./rtengine/3.3.1/Linux/x64/packages/librtengine3_3.3.1-1_amd64.deb
# Очистим
rm -f *.deb
rm -f *.zip
apt install -f
apt-get clean
apt-get autoclean
Теперь когда все готово к сборке модулей, перезагружаемся с флешки в MiniOS Live, и открываем директорию APPS/, открываем терминал и вводим:
Для начала установим права на запуск скриптов управления разделами:chmod +x 99-files/home/live/*.sh
Затем выполним сборку модулей:sudo sh 00-autoinstall.sh
Ждем завершения, в директории APPS/ будут лежать наши модули *.sb, перезагружаемся в основную систему и копируем их в minios/, и снова перезагружаемся в live.
Подготовим модули с ГОСТ и библиотеками Рутокен.
Выполняем для подготовки chroot окружения с копированием директории
sudo chroot2sb -l 12 -n 14-gost-rt.sb -d gost-rt/
Важное уточнение, данный модуль собирается в зависимости от 12, т.е. от PCSC, удалив который сломается данный модуль.
Откроется chroot, проверим наличие директории install/ в корне, перейдем в нее через cd
и выполним:sh ./install.sh
Дождемся установки до псевдографического интерфейса КриптоПРО, в котором необходимо выбрать следующее:
- KC1 Cryptographic Service Provider ( провайдер КС1)
- GUI dialog components (библиотека графического БиоДСЧ)
- Smart Card and Token support modules (пакет поддержки носителей и смарт-карт)
- cptools, GUI application for... - (Панель "Инструменты КриптоПро" с графическим интерфейсом - если устанавливается CSP 5.0).
Игнорируем предложение ввести лицензионный ключ, выходим из установщика, дожидаемся завершения работы скрипта.
Выйдем из директории обратно в корень: cd /
или cd ..
Необходимо удалить директорию install/, вводим:rm -rf install/
Завершаем работу и собираем модуль командой exit
и дожидаемся упаковки модуля.
Выполним аналогичные действия для rtengine разместив его на 98 уровне: sudo chroot2sb -l 12 -n 98-openssl-rt.sb -d openssl-rt/
Переходим в install/ и выполняем sh ./install.sh
Проведем настройку OpenSSL:
Открываем командой nano /usr/lib/ssl/openssl.cnf
# Закомментируем
openssl_conf = openssl_init
# Под ним добавим
openssl_conf = openssl_def
# В конец добавим:
[ openssl_def ]
engines = engine_section
[ engine_section ]
rtengine = gost_section
[ gost_section ]
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/librtengine.so
pkcs11_path = /usr/lib/librtpkcs11ecp.so
rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP
default_algorithms = CIPHERS, DIGEST, PKEY
enable_rand = yes
На данном примере rtengine работает только с токеном Рутокен ЭЦП.
Закомментировав rand_token и поменяв "enable_rand = yes" на "no" rtengine будет работать без токена.
Базовые правки завершены, удалим директорию install/ и соберем модуль командой exit
Перезагружаемся в основную систему, копируем модули в /minios/ и перезагружаемся в live для проверки всех установленных модулей, поддержки ГОСТ TLS в браузере и установки обновления системы.
Собрать модуль с обновлениями пакетов до 14 уровня включительно можно так:apt2sb upgrade -l 14 -n 15-upgrade.sb
Сохраняем модуль на флешку из директории пользователя, перезагружаемся в основную систему для завершения подготовки MiniOS с копированием подготовленной системы на первый раздел токена.
Подготовим директории с драйверами и необходимым ПО, для размещения на токене в разделе с системой.
Для Windows потребуется:
Драйвера Рутокен.
Рутокен Плагин.
Рутокен Коннект.
Модули интеграции OpenSSL по желанию.
Портативная PuttySC (zip архив).
Плагин для Госуслуг.
Утилита rtadmin3.1.
Дополнительно добавлю: 7zip, VeraCrypt, KeePassXC, Chromium-Gost, КриптоПРО-CSP
Создадим директорию для размещения данного ПО например Windows_soft/, rtadmin разместим в директории rtadmin3.1/.
Подготовим bat/cmd файлы для работы с разделами, сохраним их в корне флешки.
Создадим файлы, первый h-lock.cmd со следующим содержимым:rtadmin3.1/rtadmin.exe set-volume-access-mode -P console --volume-id 2 --new-mode h --temp
h-unlock-r.cmd:rtadmin3.1/rtadmin.exe set-volume-access-mode -P console --volume-id 2 --new-mode r --temp
h-unlock-rw.cmd:rtadmin3.1/rtadmin.exe set-volume-access-mode -P console --volume-id 2 --new-mode rw --temp
os-unlock.cmd:rtadmin3.1/rtadmin.exe set-volume-access-mode -P console --volume-id 1 --new-mode rw --temp
Если подготавливали с отдельной флешки, переносите все модули и ядро на первый раздел Рутокена, копируем файлы cmd и директории с ПО.
Переводим 1 раздел токена в RO режим командой:rtadmin.exe set-volume-access-mode -P console --volume-id 1 --new-mode r --temp
На этом настройка и подготовка системы и токена окончена.
Инструкция по настройке удаленного доступа к серверу через SSH доступна тут, от себя добавлю, что сертификаты я сгенерировал в XCA, далее экспортировал в der формате и действовал по инструкции, так же можно сразу загрузить через XCA на токен.
Загружаемся в live режиме
Раздел "Генерация ключей", "второй вариант" из инструкции Рутокен:
Пропускаем пункты с 1.3 по 1.6, выполняем их в XCA, сразу экспортируем ключ и сертификат в der формате,
Выполняем пункт 1.7 и 1.8.
Добавляем публичный ключ на сервер.
Проверяем под Linux ssh -I /usr/lib/librtpkcs11ecp.so user@server
Для Windows можно использовать форк PuttySC и установить Драйвера Рутокен.
Открываете PuttySC, раскрываете SSH далее Certificate > Set PKCS cert выбираем путь к библиотеке она лежит в корне System32, пример "C:\Windows\System32\rtPKCS11ECP.dll", и выбираете сертификат который создали ранее в XCA > ok > Open в нижней части программы, далее откроется приглашение на ввод пин-кода, необходимо ввести пин пользователя который по стандарту "12345678", не пин локального пользователя от скрытого раздела или раздела RO с системой.
Заключение, в данной статье показал как создать защищенную от записи систему на примере MiniOS и Рутокен ЭЦП flash, для работы на гос порталах и загрузки в защищенную неизменяемую систему с любого устройства ПК или ноутбука.
На втором разделе токена у нас защищена область скрытая от глаз с доступом по пин коду, аналогичная ПО Рутокен Диск только бесплатно и без графического интерфейса. Я дополнительно храню всю критическую информацию в контейнере VeraCrypt на случай если в Рутокене есть уязвимость позволяющая прочитать информацию в защищенном разделе.
Можете добавлять свое ПО в модули или создавать новые, добавить поддержку других токенов.
Можно аналогично сделать через Ventoy без использования Рутокен в качестве носителя, смотрите документацию по инъекции файлов в образ при монтировании, потребуется отредактировать OpenSSL для работы без токена.
Планы на будущие
В планах собрать на базе MiniOS серверную систему без графической оболочки, полностью настроенную со всеми конфигурациями с защитой от изменения.