Гайд по настройке Рутокен ЭЦП в 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. Если сертификаты ГОСТ
Рутокен ЭЦП часто использует ГОСТ-сертификаты.
Здесь есть важные нюансы:
opensslможет не понимать ГОСТ-алгоритмы без GOST engine/provider.pam_pkcs11может не суметь проверить цепочку, если криптографический стек ОС не поддерживает нужные алгоритмы.- Сертификат может быть виден через Рутокен, но плохо парситься стандартным
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.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.