Подробный гайд: pcsc_scan не видит Рутокен на Альт Линукс в ВМ zVirt - Часть 3
11. Проверить права доступа
Вы запускаете pcsc_scan через sudo, поэтому права обычного пользователя пока не критичны. Но если потом захотите работать без sudo, настройте правила.
Проверьте группы:
getent group usb
getent group pcsc
Добавьте своего пользователя, если нужно:
sudo usermod -aG usb $USER
sudo usermod -aG pcsc $USER
После этого нужно перелогиниться.
Можно создать правило udev:
sudo tee /etc/udev/rules.d/99-rutoken.rules <<'EOF'
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0a89", ATTR{idProduct}=="0030", MODE="0660", GROUP="usb", TAG+="uaccess", ATTR{power/autosuspend}="-1", ATTR{power/control}="on"
EOF
Затем:
sudo udevadm control --reload
sudo udevadm trigger --action=add --subsystem-match=usb
sudo udevadm settle
Для диагностики можно временно поставить MODE="0666", но для боевого сервера с ключами это небезопасно.
12. Проверить сервис pcscd
Проверьте статус:
systemctl status pcscd --no-pager
systemctl status pcscd.socket --no-pager
Включите автозапуск, если нужно:
sudo systemctl enable --now pcscd.socket pcscd.service
Или, если pcscd.socket отсутствует:
sudo systemctl enable --now pcscd
Посмотрите параметры юнита:
systemctl cat pcscd
systemctl show pcscd -p User -p PrivateDevices -p DevicePolicy -p ProtectSystem -p ProtectHome -p DynamicUser
Если там есть:
PrivateDevices=yes
или:
DevicePolicy=closed
это может мешать доступу к USB.
Тогда можно сделать override:
sudo systemctl edit pcscd
И добавить, если это допустимо:
[Service]
PrivateDevices=no
DevicePolicy=auto
Затем:
sudo systemctl daemon-reload
sudo systemctl restart pcscd
Но в вашем случае запуск вручную тоже не видит устройство, поэтому это не основная причина, а дополнительная проверка.
13. Особенности zVirt / KVM / QEMU
Судя по картине, это самый вероятный источник проблемы.
13.1. Пробрасывать лучше устройство, а не порт
В zVirt лучше пробрасывать конкретное устройство по:
vendor = 0x0a89
product = 0x0030
а не просто порт шины или весь контроллер. Если у вас проброшен именно порт, удалите этот проброс и добавьте устройство заново.
13.2. Освободите Рутокен на хосте
На физическом хосте, где установлен zVirt/KVM, устройство не должно использоваться:
pcscd;scdaemon;openct;gpg-agent;- КриптоПро;
- другими процессами подписи.
На хосте для теста можно остановить:
sudo systemctl stop pcscd pcscd.socket 2>/dev/null
gpgconf --kill scdaemon 2>/dev/null
sudo pkill -f pcscd 2>/dev/null
sudo pkill -f scdaemon 2>/dev/null
13.3. Проверьте контроллер: лучше использовать USB 2.0, а не USB 3.0
У вас в ВМ есть:
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Рутокен находится на Bus 001, но в виртуальной машине может присутствовать контроллер xHCI, который иногда плохо работает с full-speed/low-speed USB-токенами.
Если есть возможность в zVirt:
- уберите или отключите USB 3.0/xHCI для этой ВМ;
- добавьте или используйте USB 2.0 EHCI;
- для очень старых или низкоскоростных токенов иногда помогает USB 1.1 UHCI/OHCI.
После изменения конфигурации ВМ лучше полностью выключить и запустить, а не просто перезагрузить.
13.4. Проверьте скорость устройства
Команда:
lsusb -t
Если Рутокен виден как:
12M
это full-speed, нормально.
Если:
1.5M
это low-speed, и в виртуальных машинах с xHCI иногда бывают проблемы. Тогда лучше использовать UHCI/OHCI/EHCI контроллер.
13.5. Отключите автосон USB в гостевой ОС
Временно:
echo -1 | sudo tee /sys/module/usbcore/parameters/autosuspend 2>/dev/null || true
И для конкретного устройства, если DEV найден:
echo on | sudo tee "$DEV/power/control" 2>/dev/null || true
echo -1 | sudo tee "$DEV/power/autosuspend" 2>/dev/null || true
Постоянное правило было выше:
ATTR{power/autosuspend}="-1", ATTR{power/control}="on"
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.