Программно извлечь Рутокен по серийному номеру
Есть задача управления Рутокенами в Линукс.
Через интерес PKCS#11 API удается прочитать необходимые данные (серийный номер, отпечаток сертификата и т.п.)
Если данный Рутокен подключен к ЭВМ, для которой эксплуатация данного токена запрещена, то его нужно программно извлечь.
Для программной блокировки можно использовать доступ к sysfs (по Sysname/Syspash в нотации udev). Отслеживать
подключение Рутокенов как USB устройств можно с помощью событий udev. В этом нет проблем.
Если к системе подключается только ОДИН Рутокен, то нет проблем: Прочитали Serial/Number из слота PKCS#11, при необходимости удалили устройство Рутокена на USB шине.
Проблема возникает, если к ЭВМ подключается НЕСКОЛЬКО Рутокенов одновременно. Если Руктоены подключаются ПОСЛЕДОВАТЕЛЬНО - то тоже нет проблем, можно "склеивать" события подключения USB устройств и появления токенов в слотах PKCS#11 по времени. Проблема возникает при одновременном подключении нескольких токенов или, если токены подключены ДО старта программы (до старта ПЭВМ), тогда сложно установить взаимно однозначное соответствие между USB устройством (все токены на шине USB имеют одинаковый Serial="Aktiv_Rutoken_ECP") и слотом PKCS#11, для которого доступен уникальный серийный номер Рутокена и другие атрибуты объектов на нем.
Вероятно, если к ЭВМ будет подключаться "запрещенный" (не учтенный), Рутокен придется блокировать (удалять программно) все Рутокены сразу. Что конечно не изящно.
Быть может есть способ заблокировать работу Рутокена через PKCS#11 API?
Или как установить соответствие между номером слота PKCS#11 и номер устройства на шине USB?