Гайд по настройке Рутокен ЭЦП в Red OS 8: pam_pkcs11 «No matching certificate found» - Часть 3

Подробный гайд по настройке Рутокен ЭЦП в Red OS 8: пошагово решаем ошибку pam_pkcs11 «No matching certificate found» при входе в систему.

2026.10.16                  


Гайд по настройке Рутокен ЭЦП в Red OS 8: pam_pkcs11 «No matching certificate found» - Часть 3Гайд по настройке Рутокен ЭЦП в Red OS 8: pam_pkcs11 «No matching certificate found» - Часть 3

9. Добавьте отладку и проверьте, что именно не совпадает

Добавьте в PAM-строку debug. Лучше всего сначала сделать отдельный тестовый PAM-сервис.

Установите pamtester, если доступен:

sudo dnf install pamtester

Создайте тестовый сервис:

sudo tee /etc/pam.d/rutoken-test > /dev/null <<'EOF'
auth sufficient pam_pkcs11.so debug
auth required pam_deny.so
account required pam_permit.so
session required pam_permit.so
EOF



Запустите тест, заменив username на нужного пользователя:

sudo pamtester rutoken-test username authenticate

Вас должны попросить ввести PIN токена.


В соседнем терминале смотрите лог:

sudo journalctl -f | grep -iE 'pam_pkcs11|pcscd|rtpkcs11'

или:

sudo tail -f /var/log/secure | grep -i pam_pkcs11

Возможные полезные сообщения:

Сертификат вообще не найден

Например:

no certificate found

Причины:

  • неверный путь к librtpkcs11ecp.so;
  • токен не виден через pcscd;
  • сертификат отсутствует на токене;
  • сертификат виден только после login, но PAM не получает корректный доступ;
  • используется неправильный слот;
  • библиотека не той битности;
  • сертификат не соответствует ожиданиям pam_pkcs11.

Проверяйте:

pkcs11-tool --module "$RUTOKEN_MOD" --list-slots
pkcs11-tool --module "$RUTOKEN_MOD" --login --list-objects --type cert
pkcs11-tool --module "$RUTOKEN_MOD" --login --list-objects --type privkey

Сертификат найден, но маппер не сработал

Например:

mapper subject failed
no matching certificate found

Причины:

  • неправильная строка в /etc/pam_pkcs11/subject_mapping;
  • формат subject в конфиге не совпадает с форматом, который использует pam_pkcs11;
  • пользователь указан неверно;
  • в файле CRLF, лишние пробелы, неправильная кодировка.

Скопируйте subject именно из отладочного вывода и добавьте его в subject_mapping.


Сертификат найден, но не прошёл проверку

Например:

certificate verification failed
unable to get local issuer certificate
certificate expired
unable to check CRL
unknown algorithm

Причины:

  • нет корневого/промежуточного УЦ в /etc/pam_pkcs11/cacertificates;
  • не выполнен openssl rehash;
  • просрочен сертификат;
  • неверное время на машине;
  • отсутствует или недоступен CRL;
  • ГОСТ-алгоритмы не поддерживаются текущей связкой.

10. Временная диагностика с verify = false

Чтобы понять, проблема в проверке УЦ или в маппинге, временно установите:

verify = false;

в /etc/pam_pkcs11/pam_pkcs11.conf.


Затем повторите:

sudo pamtester rutoken-test username authenticate

Если с verify = false вход работает, а с verify = true нет — проблема в доверии к сертификату:

  • УЦ;
  • цепочка;
  • срок действия;
  • CRL;
  • время;
  • EKU;
  • поддержка ГОСТ.

После диагностики постарайтесь вернуть:

verify = true;

и корректно добавить сертификаты УЦ. Работа с verify = false снижает безопасность: система проверяет только владение ключом, но не доверяет УЦ и не проверяет цепочку. В доверенной изолированной среде это иногда допустимо, но в продакшене лучше настроить нормальную проверку.


11. Если сертификаты ГОСТ

Рутокен ЭЦП часто использует ГОСТ-сертификаты.

Здесь есть важные нюансы:

  1. openssl может не понимать ГОСТ-алгоритмы без GOST engine/provider.
  2. pam_pkcs11 может не суметь проверить цепочку, если криптографический стек ОС не поддерживает нужные алгоритмы.
  3. Сертификат может быть виден через Рутокен, но плохо парситься стандартным openssl.

Проверьте, видит ли openssl сертификат:

openssl x509 -inform DER -in /tmp/rutoken-cert.der -noout -text

Если вывод с ошибками вроде неизвестного алгоритма, попробуйте установить ГОСТ-поддержку, если она есть в вашей Red OS:

sudo dnf search gost
sudo dnf search engine

Названия пакетов могут отличаться, например:

sudo dnf install openssl-gost-engine

или аналогичный пакет.


Если полноценная проверка ГОСТ-цепочки не получается, у вас есть варианты:

  • использовать сертификат с RSA для входа по PAM, если политика безопасности это допускает;
  • временно использовать verify = false и маппинг по subject, понимая риски;
  • использовать сертифицированный/вендорный стек Рутокен или другой поддерживаемый ГОСТ-провайдер;
  • обратиться к документации вашего УЦ и требованиям ИБ для вашей среды.



Если после исправления маппинга появляется уже другая ошибка, например CKR_MECHANISM_INVALID, это может указывать на проблему подписи challenge ГОСТ-механизмом.


12. Настройте PAM для реального входа

После успешного теста через rutoken-test нужно подключить модуль к нужным сервисам: login, gdm, sshd, sudo, su и т.д.


Вариант 1: добавить pam_pkcs11 в конкретный сервис

Например, для локального входа в консоль обычно используется /etc/pam.d/login.

Сделайте копию:

sudo cp -a /etc/pam.d/login /root/login.pam.backup

Добавьте в начало секции auth:

auth sufficient pam_pkcs11.so debug

Пример логики:

# Если токен есть и сертификат подходит — вход успешен.
auth sufficient pam_pkcs11.so debug

# Дальше идут обычные правила системы.
auth include system-auth
account include system-auth
password include system-auth
session include system-auth

Если нужно разрешить и токен, и пароль, используйте sufficient.


Если нужно требовать только токен, используйте более жёсткий вариант, но аккуратно:

auth requisite pam_pkcs11.so debug
auth required pam_deny.so

После этого обычный пароль по этому сервису не должен использоваться, но account, password, session всё равно должны корректно отрабатывать через системные правила.


Для SSH

Проверьте, что в /etc/ssh/sshd_config есть:

UsePAM yes

Затем добавьте в начало секции auth файла /etc/pam.d/sshd:

auth sufficient pam_pkcs11.so debug

Перезапускать sshd обычно не обязательно для изменений в PAM, но если меняли sshd_config, перезапуск нужен:

sudo systemctl restart sshd

Делайте это только при наличии резервного доступа.


Для GDM / графического входа

В зависимости от окружения в Red OS файлы могут быть:

/etc/pam.d/gdm-password
/etc/pam.d/gdm-smartcard
/etc/pam.d/gdm

Посмотрите содержимое:

ls -l /etc/pam.d/gdm*
grep -R "auth" /etc/pam.d/gdm*

Обычно добавляют:

auth sufficient pam_pkcs11.so debug

В нужный auth-стек.


После правки можно перезапустить GDM, но это завершит текущие графические сессии:

sudo systemctl restart gdm

Лучше делать это из текстовой консоли или через отдельный TTY.


Для sudo

Если нужно использовать токен для sudo, добавьте в /etc/pam.d/sudo:

auth sufficient pam_pkcs11.so debug

Но сначала протестируйте в отдельной сессии, чтобы не потерять sudo.


Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта