Подробный гайд по настройке входа в РЕД ОС 7.3 по смарт-карте Рутокен ЭЦП
Ниже представлен подробный пошаговый гайд по настройке аутентификации (входа в систему) в операционной системе РЕД ОС 7.3 с использованием смарт-карты Рутокен ЭЦП и криптографических алгоритмов ГОСТ Р 34.10-2012.
В отличие от стандартных сценариев с ключами RSA, для работы с ГОСТ-алгоритмами используется специальный движок rtengine для OpenSSL и проприетарный PAM-модуль от производителя.
Важное предупреждение
Перед внесением изменений в системные конфигурационные файлы (особенно /etc/pam.d/ и /etc/ssl/) настоятельно рекомендуется сделать их резервные копии. Ошибка в PAM-конфигурации может привести к невозможности входа в систему.
Шаг 1. Установка базовых пакетов и библиотек
1. Обновите систему и установите необходимые пакеты из репозиториев РЕД ОС:
sudo yum update
sudo yum install ccid opensc pam_pkcs11 p11-kit openssl
Убедитесь, что установлен openssl версии 1.1 или выше (openssl version).
2. Скачайте с официального сайта Рутокен (раздел "Загрузки" -> "SDK" / "Linux") следующие компоненты:
- PAM-модуль для Linux (
librtpam.so.1.0.0). - Библиотеку PKCS#11 для Рутокен ЭЦП (
librtpkcs11ecpв формате.rpm). - Комплект разработчика (Rutoken SDK) в формате
.zip(нужен дляrtengine).
3. Установите PAM-модуль:
sudo cp librtpam.so.1.0.0 /usr/lib64/
sudo chmod 644 /usr/lib64/librtpam.so.1.0.0
4. Установите PKCS#11 библиотеку:
sudo rpm -i librtpkcs11ecp_X.X.X.X-X_x86_64.rpm
Проверьте, что токен определяется (вставьте Рутокен в USB-порт):
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -T
Шаг 2. Настройка OpenSSL для работы с ГОСТ (rtengine)
Для генерации ГОСТ-сертификатов OpenSSL должен знать, как работать с Рутокеном.
1. Распакуйте скачанный архив rutoken-sdk-latest.zip и скопируйте движок rtengine в системную директорию:
sudo cp /path/to/sdk/openssl/bin/1.1/rtengine-1.1/linux_glibc-x86_64/lib/librtengine.so /usr/lib64/engines-1.1/librtengine.so
sudo mv /usr/lib64/engines-1.1/librtengine.so /usr/lib64/engines-1.1/rtengine.so
2. Отредактируйте конфигурацию OpenSSL:
sudo nano /etc/ssl/openssl.cnf
В самом начале файла найдите или добавьте строку:
openssl_conf = openssl_def
В самый конец файла добавьте следующие секции:
[ openssl_def ]
engines = engine_section
[ engine_section ]
rtengine = gost_section
[ gost_section ]
engine_id = rtengine
dynamic_path = /usr/lib64/engines-1.1/rtengine.so
pkcs11_path = /usr/lib64/librtpkcs11ecp.so
default_algorithms = CIPHERS, DIGEST, PKEY, RAND
3. Разрешите использование ГОСТ-алгоритмов в системных политиках шифрования:
sudo nano /etc/crypto-policies/back-ends/openssl.config
Замените содержимое файла на следующую строку:
@SECLEVEL=1:aGOST:aGOST01:kGOST:GOST94:GOST89MAC:kEECDH:kRSA:kEDH:kPSK:kDHEPSK:kECDHEPSK:-aDSS:-3DES:!DES:!RC4:!RC2:!IDEA:-SEED:!eNULL:!aNULL:!MD5:-SHA384:-CAMELLIA:-ARIA:-AESCCM8
4. Экспортируйте переменную окружения для текущей сессии терминала (чтобы OpenSSL подхватил конфиг при генерации):
export OPENSSL_CONF=/etc/ssl/openssl.cnf
Шаг 3. Генерация ключевой пары на Рутокене
При генерации ключа через pkcs11-tool необходимо задать --id в виде hex-кодов ASCII. Например, кодам 3132 соответствует строка "12". Именно эту строку (12) мы будем передавать в OpenSSL.
Сгенерируйте ключевую пару ГОСТ Р 34.10-2012 (512 бит, параметр А):
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
(Команда запросит PIN-код токена. По умолчанию для Рутокен ЭЦП это 12345678).
Шаг 4. Создание самоподписанного сертификата
Создайте сертификат с помощью rtengine, указав ID ключа в формате OpenSSL (pkcs11:id=12):
openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer -md_gost12_512
Запишите полученный сертификат обратно на Рутокен:
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.cer --id 3132
Шаг 5. Регистрация сертификата в системе
Чтобы PAM-модуль мог сопоставить сертификат с локальным пользователем, его нужно экспортировать и добавить в доверенные.
1. Скачайте сертификат с токена (ID = 3132):
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -r -y cert --id 3132 --output-file cert.crt
2. Конвертируйте его в PEM-формат:
openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
3. Добавьте сертификат в список авторизованных для вашего пользователя:
mkdir ~/.eid
chmod 0755 ~/.eid
cat cert.pem >> ~/.eid/authorized_certificates
chmod 0644 ~/.eid/authorized_certificates
Шаг 6. Настройка PAM для входа по смарт-карте
Откройте конфигурационные файлы PAM:
sudo nano /etc/pam.d/system-auth
sudo nano /etc/pam.d/password-auth
В самое начало обоих файлов добавьте следующую строку:
auth sufficient /usr/lib64/librtpam.so.1.0.0 /usr/lib64/librtpkcs11ecp.so
Проверка:
Выполните команду su <ваш_username>. Если всё настроено верно, система запросит не пароль пользователя, а PIN-код Рутокена. После успешного ввода PIN-кода вы войдете в сессию.
Шаг 7. Настройка автоблокировки при извлечении токена (Опционально)
Для повышения безопасности можно настроить автоматическую блокировку экрана, если Рутокен был физически извлечен из USB-порта.
1. Узнайте вашу графическую оболочку:
echo $XDG_CURRENT_DESKTOP
В зависимости от оболочки команда блокировки будет разной (MATE: mate-screensaver-command --lock, Cinnamon: cinnamon-screensaver-command --lock, GNOME: xdg-screensaver lock).
2. Отредактируйте конфиг менеджера событий (замените команду в блоке card_remove на нужную для вашей оболочки):
sudo nano /etc/pam_pkcs11/pkcs11_eventmgr.conf
pkcs11_eventmgr
{
daemon = true;
debug = false;
polling_time = 1;
expire_time = 0;
pkcs11_module = /usr/lib64/librtpkcs11ecp.so;
event card_insert {
on_error = ignore ;
action = "/bin/false";
}
event card_remove {
on_error = ignore;
action = "mate-screensaver-command --lock"; # Укажите вашу команду
}
event expire_time {
on_error = ignore;
action = "/bin/false";
}
}
3. Добавьте pkcs11_eventmgr в автозагрузку пользователя:
mkdir -p ~/.config/autostart
nano ~/.config/autostart/smartcard-screensaver.desktop
Вставьте содержимое:
[Desktop Entry]
Type=Application
Name=Smart Card Screensaver
Comment=Application to lock screen on smart card removal.
Exec=/usr/bin/pkcs11_eventmgr daemon
- Перезагрузите компьютер для применения всех настроек.
Если в процессе настройки у вас возникнут ошибки (например, Engine not found или Token not recognized), убедитесь, что служба pcscd запущена (sudo systemctl status pcscd) и библиотека librtpkcs11ecp.so корректно определилась на Шаге 1. Удачи в настройке!
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.