Гайд: LIBUSB_ERROR_NO_DEVICE и pcscd с Рутокен в Astra Linux через VirtualHere - Часть 2

Гайд по устранению ошибок LIBUSB_ERROR_NO_DEVICE и сбоям pcscd при работе с Рутокен Лайт в Astra Linux через VirtualHere. Пошаговая диагностика.

2026.11.02                  


Гайд: LIBUSB_ERROR_NO_DEVICE и pcscd с Рутокен в Astra Linux через VirtualHere - Часть 2Гайд: LIBUSB_ERROR_NO_DEVICE и pcscd с Рутокен в Astra Linux через VirtualHere - Часть 2

7. Права доступа к сокету pcscd

КриптоПро и другие приложения должны иметь доступ к PC/SC-сокету.

Проверьте:

ls -l /run/pcscd/

Обычно там должны быть файлы вроде pcscd.comm или pcscd.sock.

Проверьте группу:

getent group pcscd

Если КриптоПро запускается от обычного пользователя, можно попробовать временно выполнить команду КриптоПро через sudo. Если через sudo токен виден, а от пользователя нет — проблема в правах.



Если приложение или сервис использует КриптоПро от отдельного пользователя, добавьте этого пользователя в группу pcscd, если она существует:

sudo usermod -aG pcscd $USER

После этого нужно перелогиниться или перезапустить пользовательскую сессию. Для системных сервисов, например веб-сервера, нужно убедиться, что сервис имеет доступ к /run/pcscd.

В systemd может потребоваться:

SupplementaryGroups=pcscd

или проброс каталога /run/pcscd, если сервис работает в контейнере.


8. Отключите энергосбережение и автосон

Одна из частых причин LIBUSB_ERROR_NO_DEVICE — система пытается перевести USB-устройство в режим энергосбережения.


8.1. Временное отключение

Для теста:

for f in /sys/bus/usb/devices/*/power/autosuspend; do
  echo -1 | sudo tee "$f" >/dev/null 2>&1 || true
done

Или, если доступно управление через control:

for f in /sys/bus/usb/devices/*/power/control; do
  echo on | sudo tee "$f" >/dev/null 2>&1 || true
done

8.2. Постоянное отключение через параметр ядра

Если это не VDS с недоступным загрузчиком, можно добавить параметр:

usbcore.autosuspend=-1

в параметры загрузки ядра.

Отредактируйте:

sudo nano /etc/default/grub

Найдите строку вида:

GRUB_CMDLINE_LINUX_DEFAULT="..."

Добавьте внутрь:

usbcore.autosuspend=-1

Пример:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"

Затем:

sudo update-grub

или:

sudo grub-mkconfig -o /boot/grub/grub.cfg

И перезагрузите машину.


8.3. Правило для конкретного устройства

Сначала узнайте ID токена:

lsusb | grep -Ei 'aktiv|rutoken'

Пример вывода:

Bus 002 Device 005: ID xxxx:yyyy Aktiv Co. Rutoken lite

Здесь xxxx — idVendor, yyyy — idProduct.

Создайте правило:

sudo nano /etc/udev/rules.d/99-rutoken-no-autosuspend.rules

Содержимое:

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="yyyy", ATTR{power/autosuspend}="-1"

Замените xxxx и yyyy на ваши значения.

Перечитайте правила:

sudo udevadm control --reload-rules

9. Особенности проброса через VirtualHere

Для смарт-карт и токенов проброс по сети гораздо более чувствителен к задержкам, чем обычная флешка. Флешки КриптоПро может видеть нормально, а токен — нет, потому что массовые накопители терпят задержки, а протокол смарт-карты может не успевать за таймаутами.


9.1. Серверная часть на Windows 10

Рекомендуется:

  1. Вставить Рутокен напрямую в материнскую плату, желательно в порт сзади.
  2. Не использовать:
    • переднюю панель корпуса;
    • длинные кабели;
    • дешевые удлинители;
    • непрямые хабы;
    • KVM;
    • USB-over-Ethernet удлинители;
    • мониторы с USB-хабом.
  3. Попробовать порт:
    • сначала обычный порт сзади;
    • затем попробовать порт с другой стороны;
    • если есть порт, который работает медленнее, иногда помогает именно он;
    • если подключено через порт, лучше использовать прямое подключение.
  4. Временно проверить токен в порту, который не используется для зарядки и не имеет специальных режимов.
  5. Если есть возможность — использовать порт, который работает стабильнее.

9.2. Энергосбережение в Windows

На сервере, где подключен токен, отключите энергосбережение.

В схеме электропитания:

  1. Панель управления → Электропитание → Настройка схемы электропитания → Дополнительные параметры питания.
  2. Параметры временного отключения портов.
  3. Установите «Запрещено» или «Отключено».

В Диспетчере устройств:

  1. Контроллеры.
  2. Для корневых концентраторов откройте свойства.
  3. Управление электропитанием.
  4. Снимите галочку «Разрешить отключение этого устройства для экономии энергии».


Если есть пункты вроде:

  • «Корневой концентратор»;
  • «Концентратор»;
  • «Устройство»;
  • «Смарт-карта»;
  • «Устройство чтения смарт-карт»;

— проверьте, нет ли там отдельных настроек энергосбережения.


9.3. Локальные приложения на сервере

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

На сервере временно закройте:

  • панель управления Рутокен;
  • КриптоПро;
  • браузеры с плагином Рутокен;
  • приложения подписи;
  • любые утилиты Aktiv;
  • диспетчеры сертификатов.

Иногда также помогает временная остановка локальной службы смарт-карт на сервере, пока токен пробрасывается клиенту.


9.4. Настройки клиента

Если клиент стоит на Astra Linux, проверьте:

pgrep -a vhclient
pgrep -a virtualhere

Посмотрите журналы, если клиент установлен как служба:

systemctl list-units --all | grep -Ei 'virtualhere|vhclient'
journalctl -u 'virtualhere*' -u 'vhclient*' --since "-1 hour"

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

В интерфейсе клиента:

  1. Убедитесь, что токен находится в состоянии использования/захвата клиентом.
  2. Попробуйте:
    • отключить устройство;
    • снова подключить;
    • переподключить клиент;
    • перезапустить клиент.
  3. Если есть пункт автоматического переподключения — включите его.
  4. Если есть выбор транспортного режима — попробуйте разные варианты, если они доступны.
  5. Если есть шифрование — временно отключите для теста в доверенной сети.
  6. Если есть сжатие — временно отключите для теста.
  7. Если клиент использует режим с ядром и пользовательский режим — попробуйте оба, если доступны.
  8. Если есть настройки таймаутов — попробуйте немного увеличить их.

9.5. Сеть между сервером и клиентом

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

  • низкая задержка;
  • отсутствие потери пакетов;
  • стабильный канал;
  • отсутствие агрессивного фаервола, который рвёт длительные сессии.

Проверьте:

ping -c 100 адрес_сервера
mtr адрес_сервера

Если есть потери, джиттер, задержки выше единиц миллисекунд внутри локальной сети — это уже подозрительно.

Если проброс идет через:

  • Wi-Fi;
  • IPsec;
  • интернет;
  • powerline-адаптеры;
  • мосты;
  • слабые каналы;
  • удаленный офис;

— для смарт-карт это часто приводит к таким ошибкам. Особенно плохо работают пробросы смарт-карт через интернет. Даже если канал кажется хорошим, для смарт-карты важны не мегабиты, а стабильность и малая задержка.


9.6. Если клиент и сервер в одной сети

Идеальный вариант для теста:

  • сервер и клиент в одной проводной сети;
  • коммутатор рядом;
  • отсутствие фаервола;
  • статические адреса;
  • прямой маршрут;
  • стандартная величина пакета.

Если используете виртуальную машину, лучше, чтобы клиент стоял прямо внутри гостевой ОС.


Не стоит делать двойную цепочку:

токен → сервер → хост с клиентом → проброс в виртуалку

Чем больше звеньев, тем выше вероятность ошибок.


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


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

Комментарии

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