Гайд: Устранение No slot with a token was found для Рутокен S и pkcs11-tool в Linux - Часть 2
7. Проверьте права доступа к USB-устройству
Иногда lsusb устройство видит, а пользовательский процесс не может с ним работать.
Посмотрите, как подключён токен:
lsusb
Например:
Bus 001 Device 007: ID 0a89:0030 Aktiv Rutoken S
Проверьте права:
ls -l /dev/bus/usb/001/007
Если хотите быстро проверить, проблема ли в правах, запустите временно от root:
sudo pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-slots
Если от root работает, а от пользователя нет — проблема в правах/группах/udev.
Добавьте пользователя в группу plugdev
На многих системах:
sudo usermod -aG plugdev $USER
Затем выйдите из сессии и зайдите заново, либо перезагрузитесь.
Проверка:
groups
Должна быть группа plugdev.
8. Проверьте, не занят ли токен другим процессом
Иногда устройство занято:
- браузером;
- криптопровайдером;
pcscdв зависшем состоянии;- другой криптобиблиотекой;
- демоном, который уже открыл токен.
Перезапустите pcscd:
sudo systemctl restart pcscd
Затем:
pcsc_scan
Если нужно посмотреть процессы, связанные с токеном:
sudo lsof | grep -i usb
ps aux | grep -i pkcs
9. Проверьте, что токен инициализирован
Если токен новый или после сброса, на нём может не быть пользовательской части. Некоторые PKCS#11-реализации не показывают слот/токен, пока токен не инициализирован.
Проверьте список слотов:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-slots
Если слот есть, но нет токена, попробуйте:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-token-slots
Для инициализации обычно нужен SO-PIN/PIN администратора.
Типовая команда инициализации выглядит примерно так:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so \
--init-token \
--so-pin 12345678 \
--label "MyRutoken"
Затем инициализация пользователя:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so \
--init-pin \
--so-pin 12345678 \
--pin 12345678 \
--label "User"
Внимание:
Не используйте чужие примеры PIN/SO-PIN для рабочего токена. У Рутокенов могут быть заводские коды, зависящие от поставки/модели/политики. Если токен корпоративный — уточните PIN/SO-PIN у администратора.
10. Проверьте архитектуру: 32/64-бит
Если система 64-битная, а библиотека 32-битная или наоборот — работать не будет.
Проверка:
uname -m
file /usr/lib/librtpkcs11ecp.so
или:
file /usr/lib64/librtpkcs11ecp.so
Для x86_64 должно быть что-то вроде:
ELF 64-bit LSB shared object, x86-64
Если у вас pkcs11-tool 64-битный, а библиотека 32-битная — он её не загрузит корректно.
11. Проверьте, не подменяется ли модуль
Иногда библиотека есть, но pkcs11-tool подхватывает другую.
Явно указывайте полный путь:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-slots
Если используете 64-битный дистрибутив:
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --list-slots
12. Включите подробный вывод
Попробуйте:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-slots --verbose
Или несколько раз -v:
pkcs11-tool -vvv --module /usr/lib/librtpkcs11ecp.so --list-slots
Можно также попробовать диагностические переменные окружения для OpenSC:
OPENSC_DEBUG=9 pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-slots
Смотрите, где именно появляется ошибка:
- не могу открыть модуль;
C_GetSlotListвернул пустой список;- нет прав;
- библиотека не найдена;
- не найден
libpcsclite.so; - не удалось подключиться к
pcscd.
13. Частая причина: библиотека установлена вручную и не видна системе
Если вы просто скопировали librtpkcs11ecp.so в /usr/lib, обновите кэш:
sudo ldconfig
Проверьте:
ldconfig -p | grep librtpkcs11ecp
Пример:
librtpkcs11ecp.so (libc6,x86-64) => /usr/lib/librtpkcs11ecp.so
Если библиотека в нестандартном каталоге, можно временно проверить так:
export LD_LIBRARY_PATH=/opt/rutoken/lib:$LD_LIBRARY_PATH
pkcs11-tool --module /opt/rutoken/lib/librtpkcs11ecp.so --list-slots
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.