Гайд по настройке Рутокен ЭЦП в Red OS 8: pam_pkcs11 «No matching certificate found» - Часть 5
20. SELinux и другие ограничения
Проверьте режим:
getenforce
Если Enforcing, временно переведите в разрешающий режим:
sudo setenforce 0
Повторите тест:
sudo pamtester rutoken-test username authenticate
Если с выключенным SELinux заработало, верните:
sudo setenforce 1
И создайте локальную политику по логам:
sudo ausearch -m avc -ts recent | grep -iE 'pam|pcsc|pkcs11|rtpkcs11'
Затем, если нужно:
sudo ausearch -m avc -ts recent | audit2allow -M pam_pkcs11_local
sudo semodule -i pam_pkcs11_local.pp
Пакет audit2allow может быть в policycoreutils-devel или аналогичном пакете.
Не оставляйте setenforce 0 постоянно без крайней необходимости.
21. Типовой алгоритм локализации ошибки
Чтобы быстро понять, где проблема, действуйте так:
Шаг 1. Токен виден?
lsusb
systemctl status pcscd
pkcs11-tool --module "$RUTOKEN_MOD" --list-slots
Если нет — проблема с драйверами, USB, pcscd, виртуализацией.
Шаг 2. Сертификат виден?
pkcs11-tool --module "$RUTOKEN_MOD" --login --list-objects --type cert
Если нет — сертификат не на токене, не тот модуль, не тот слот, объект скрыт.
Шаг 3. Есть ли ключ и совпадает ли ID?
pkcs11-tool --module "$RUTOKEN_MOD" --login --list-objects --type privkey
Если ключа нет или ID отличается — входа не будет.
Шаг 4. Временно выключите проверку УЦ
В /etc/pam_pkcs11/pam_pkcs11.conf:
verify = false;
Если заработало — проблема в цепочке доверия, CRL, сроках, времени или ГОСТ.
Шаг 5. Проверьте маппинг
Включите в PAM:
auth sufficient pam_pkcs11.so debug
Смотрите:
sudo journalctl -f | grep -i pam_pkcs11
или:
sudo tail -f /var/log/secure
Найдите строку с certificate subject или похожую.
Скопируйте субъект точно и добавьте в:
/etc/pam_pkcs11/subject_mapping
В формате:
<subject из лога> = <логин>
Шаг 6. Верните verify = true
Если с verify = true снова не работает, чините:
- УЦ;
- цепочку;
openssl rehash;- CRL;
- время;
- EKU;
- поддержку ГОСТ.
22. Пример минимального рабочего набора файлов
/etc/pam_pkcs11/pam_pkcs11.conf
pam_pkcs11 {
use_pkcs11_module = "rutoken";
pkcs11_module rutoken {
module = /usr/lib64/librtpkcs11ecp.so;
description = "Rutoken ECP";
}
use_mappers = "subject";
mapper subject {
mapfile = /etc/pam_pkcs11/subject_mapping;
}
verify = true;
ca_dir = /etc/pam_pkcs11/cacertificates;
crl_dir = /etc/pam_pkcs11/crl;
}
/etc/pam_pkcs11/subject_mapping
/C=RU/O=Example/CN=ivan@example.com = ivan
или, в зависимости от формата в логах:
C = RU, O = Example, CN = ivan@example.com = ivan
или, если формат из отладки именно такой:
CN=ivan@example.com,O=Example,C=RU = ivan
Главное — совпадение с тем, что пишет pam_pkcs11 в debug.
PAM-строка в нужном сервисе
Для варианта с резервным паролем:
auth sufficient pam_pkcs11.so debug
Для более строгого варианта:
auth requisite pam_pkcs11.so debug
23. Частые ошибки и решения
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
No matching certificate found |
нет маппинга пользователя | /etc/pam_pkcs11/subject_mapping, debug |
No matching certificate found |
сертификат не прошёл проверку | verify, УЦ, сроки, CRL |
no certificate found |
токен или сертификат не видны | pkcs11-tool --list-objects --type cert |
| Сертификат виден, но вход не работает | нет приватного ключа или другой CKA_ID |
pkcs11-tool --list-objects --type privkey |
Работает с verify = false, не работает с true |
нет доверия к УЦ | ca_dir, openssl rehash, цепочка |
| Ошибка с ГОСТ-сертификатом | нет поддержки ГОСТ в ОС/ OpenSSL / PAM | ГОСТ-провайдер, openssl x509, вендорные пакеты |
| Временно работает только из-под root | права на USB/pcsc | udev, pcscd, группы, uaccess |
| После перезагрузки всё слетело | authselect перезаписал PAM |
authselect current, кастомный профиль |
openssl x509 не читает сертификат |
DER/PEM или ГОСТ | конвертация, GOST engine/provider |
| Субъект с русскими буквами не совпадает | кодировка/формат | копировать точный subject из debug |
24. Быстрый диагностический набор команд
Можно прогнать это по очереди:
# Путь к библиотеке
find /usr/lib64 /usr/lib -name 'librtpkcs11ecp.so*' 2>/dev/null
# Задайте путь вручную, например:
export RUTOKEN_MOD=/usr/lib64/librtpkcs11ecp.so
# PC/SC
systemctl status pcscd
journalctl -u pcscd --no-pager | tail -30
# USB
lsusb | grep -iE 'rutoken|aktiv'
# Слоты
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
# Механизмы
pkcs11-tool --module "$RUTOKEN_MOD" --list-mechanisms
# Логи
sudo journalctl -f | grep -iE 'pam_pkcs11|pcscd|pkcs11'
sudo tail -f /var/log/secure 2>/dev/null | grep -i pam_pkcs11
25. Рекомендуемый порядок действий именно для вашей ошибки
Для вашего сообщения я бы сделал так:
1. Убедиться, что токен виден:
pkcs11-tool --module "$RUTOKEN_MOD" --list-slots
2. Убедиться, что сертификат и ключ есть:
pkcs11-tool --module "$RUTOKEN_MOD" --login --list-objects --type cert,privkey
3. Временно поставить в /etc/pam_pkcs11/pam_pkcs11.conf:
verify = false;
use_mappers = "subject";
4. Создать /etc/pam_pkcs11/subject_mapping и добавить туда строку:
<subject сертификата> = <локальный пользователь>
5. Создать тестовый /etc/pam.d/rutoken-test с:
auth sufficient pam_pkcs11.so debug
auth required pam_deny.so
account required pam_permit.so
session required pam_permit.so
6. Выполнить:
sudo pamtester rutoken-test username authenticate
- Если не работает — смотреть в логах, дошло ли до найденного сертификата и какой именно
subjectон ожидает. Исправитьsubject_mappingпо логу. - Если заработало с
verify = false, вернутьverify = true, добавить корневой и промежуточный сертификаты УЦ в/etc/pam_pkcs11/cacertificates, выполнитьopenssl rehashи снова протестировать. - Если
verify = trueне работает с ГОСТ-сертификатом, отдельно решать вопрос поддержки ГОСТ или осознанно принимать решение о работе без проверки цепочки, если это разрешено вашей политикой безопасности.
Если после этих шагов ошибка останется, пришлите, пожалуйста, несколько выводов без конфиденциальных данных:
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
cat /etc/pam_pkcs11/pam_pkcs11.conf
cat /etc/pam_pkcs11/subject_mapping
sudo grep -i pam_pkcs11 /var/log/secure | tail -50
и последние строки из journalctl во время попытки входа — тогда можно будет точно сказать, на каком именно этапе pam_pkcs11 отвергает сертификат.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.