Подробный гайд: pcsc_scan не видит Рутокен на Альт Линукс в ВМ zVirt - Часть 1

Подробный гайд, если pcsc_scan не видит Рутокен на Альт Линукс в ВМ zVirt. Разбор проброса USB, настройки udev, прав pcscd и анализа логов.

2026.10.18                  


Подробный гайд: pcsc_scan не видит Рутокен на Альт Линукс в ВМ zVirt - Часть 1Подробный гайд: pcsc_scan не видит Рутокен на Альт Линукс в ВМ zVirt - Часть 1

Ключевой момент из логе

hotplug_libudev.c:300:get_driver() Looking for a driver for VID: 0x1D6B ...
hotplug_libudev.c:300:get_driver() Looking for a driver for VID: 0x0627 ...

pcscd перечисляет устройства через libudev, но ни разу не пытается посмотреть драйвер для VID 0x0A89 / PID 0x0030, то есть для самого Рутокена.


Это значит, что проблема, скорее всего, не в Info.plist и не в openct, а в том, что устройство не попадает в pcscd как USB-устройство/интерфейс смарт-карты.




Обычно это одна из трёх причин:

  1. Рутокен проброшен в zVirt некорректно или работает в нестабильном режиме.
  2. Устройство не имеет активного интерфейса класса 0x0b / Smart Card.
  3. udev / authorized / SELinux / usbguard не отдают устройство в pcscd.

1. Быстрая проверка: видит ли система Рутокен как смарт-карту

Выполните:

lsusb -t

Найдите строку с Рутокеном.

В идеале должно быть что-то вроде:

Class=Smart Card

или в выводе lsusb -v интерфейс должен иметь класс 0x0b.

Затем:

sudo lsusb -v -d 0a89:0030

В выводе важно найти блок интерфейса.

Для нормальной работы через pcsc-lite-ccid нужно что-то подобное:

Interface Descriptor:
  bInterfaceClass        0x0b  Smart Card
  bInterfaceSubClass     0x00
  bInterfaceProtocol     0x00

Хорошо, если есть:

bNumConfigurations        1
bConfigurationValue       1

Если вместо 0x0b видите, например:

bInterfaceClass        0xff  Vendor Specific

или:

bInterfaceClass        0x08  Mass Storage

или:

bInterfaceClass        0x03  Human Interface Device

то обычный pcsc-lite-ccid такое устройство как смарт-карту не увидит. Тогда проблема в режиме работы токена или нужен специализированный драйвер Рутокен.


2. Проверить, что ядро нормально распознало устройство при пробросе

В одном терминале запустите:

sudo dmesg -wH

Затем в интерфейсе zVirt отключите Рутокен от ВМ и подключите его заново.

В dmesg ожидаются примерно такие строки:

usb 1-1: new full-speed USB device number 2 using xhci_hcd
usb 1-1: New USB device found, idVendor=0a89, idProduct=0030
usb 1-1: New USB device strings: ...
usb 1-1: Product: Rutoken ECP
...
config 1 interface 0 altsetting 0 class 11

Ключевое:

class 11

11 в шестнадцатеричной записи — это 0x0b, то есть Smart Card.

Если в dmesg есть ошибки вроде:

device descriptor read/64, error -71
device not accepting address
unable to enumerate USB device
no configuration found
device not accepting configuration
reset full-speed USB device

то проблема, скорее всего, в пробросе через zVirt, контроллере, питании или скорости устройства.


3. Проверить, есть ли устройство в /sys и есть ли у него интерфейс

Выполните:

DEV=$(grep -l 0a89 /sys/bus/usb/devices/*/idVendor 2>/dev/null | head -n1 | xargs -r dirname)
echo "DEV=$DEV"

Если вывод пустой:

DEV=

то устройство не видно в /sys/bus/usb/devices, хотя lsusb его показывает. В таком случае pcscd его через libudev не увидит. Это почти всегда проблема проброса или состояния устройства.

Если путь найден, выполните:

if [ -n "$DEV" ]; then
    echo "$DEV"
    cat "$DEV/bConfigurationValue" 2>/dev/null
    cat "$DEV/authorized" 2>/dev/null
    cat "$DEV/speed" 2>/dev/null
    ls -d "$DEV":* 2>/dev/null

    for i in "$DEV":*; do
        echo "$i"
        cat "$i/bInterfaceClass" 2>/dev/null
    done
fi

Ожидаемый хороший вариант:

/sys/bus/usb/devices/1-1
1
1
12
/sys/bus/usb/devices/1-1:1.0
0b

То есть:

  • устройство найдено;
  • bConfigurationValue = 1;
  • authorized = 1;
  • есть интерфейс вида 1-1:1.0;
  • bInterfaceClass = 0b.

Если:

bConfigurationValue = 0

или интерфейсов нет:

ls -d "$DEV":*

ничего не выводит, значит устройство не сконфигурировано. В этом случае pcscd не увидит его как смарт-карту. Обычно это решается переподключением, сменой проброса, сменой USB-контроллера в ВМ или исправлением ошибки проброса.


4. Проверить udev

Проверьте, активен ли systemd-udevd:

systemctl is-active systemd-udevd

Должно быть:

active

Затем, если DEV был найден:



udevadm info --query=property --path="$DEV"

И для интерфейса:

for i in "$DEV":*; do
    echo "=== $i ==="
    udevadm info --query=property --path="$i" 2>/dev/null
done

Для интерфейса смарт-карты желательно видеть что-то вроде:

INTERFACE=11/0/0

или похожие свойства, указывающие на класс 11 в шестнадцатеричном виде.

Можно также посмотреть события в реальном времени:

sudo udevadm monitor --property

Затем снова переподключите Рутокен в zVirt. При подключении должны появляться события add для USB-устройства и USB-интерфейса. Если событий нет или нет интерфейса — pcscd устройство не получит.

Иногда помогает:

sudo udevadm control --reload
sudo udevadm trigger --action=add --subsystem-match=usb
sudo udevadm settle

Если это допустимо на вашем сервере, можно перезапустить systemd-udevd:

sudo systemctl restart systemd-udevd

Но на продакшене это лучше согласовать, так как может повлиять на другие устройства.


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


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

Комментарии

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