Compartir en red un token criptográfico entre usuarios basado en usbip

En relación con los cambios en la legislación sobre los servicios de confianza (“Acerca de los servicios de confianza electrónicos” Ucrania), la empresa necesita que varios departamentos trabajen con claves ubicadas en tokens (por el momento, la cuestión del número de claves de hardware aún está abierta ).

Como herramienta de menor coste (gratuita), la elección recayó inmediatamente en usbip. El servidor de Ubintu 18.04 empezó a funcionar gracias a la publicación Domar USB/IP y probado con éxito en varias unidades flash (debido a la falta de un token en ese momento). En aquel momento no se identificaron problemas especiales aparte de la propiedad monopólica (reserva para el usuario). Está claro que para organizar el acceso de varios usuarios (al menos dos, para empezar), es necesario dividir su acceso en el tiempo y obligarlos a trabajar por turnos.

La pregunta era: ¿Cómo puedo hacerlo con el mínimo baile para que todo funcione para todos...?

La parte es torpe

Compartir en red un token criptográfico entre usuarios basado en usbip
Opción XNUMX. Varios atajos para archivos bat, a saber
a) Conexión de la clave de acceso.
b) Desconectarse deliberadamente.

Párrafo "б» Controvertido, por lo que se decidió dar la cantidad de tiempo para trabajar con la llave en 3 minutos.

La peculiaridad del cliente usbip es que después de su lanzamiento permanece colgado en la consola, sin interrumpir la sesión de la consola, puedes cerrar la conexión “aproximadamente” desde el lado del cliente y también desde el lado del servidor.

Esto es lo que funcionó bien para nosotros:

primero: conexión en.bat

usbip -a 172.16.12.26 4-1
msg * "Подпись/токен недоступны или заняты "

segundo: apagado apagado.bat

ping 127.0.0.1 -n 180
taskkill /IM usbip.exe /F

Sin depender de la conciencia del usuario, los guiones se combinaron en token.bat

on.bat | off.bat

Qué sucede: todos los archivos están en la misma carpeta, iniciada por el archivo token.bat, si se cierra la conexión, el usuario recibe inmediatamente un mensaje indicando que la clave no está disponible, en otro caso, solo después de 180 pings. Las líneas de código anteriores se pueden equipar con "@ECHO OFF" y la dirección de la consola en "> nul" para no sorprender demasiado al usuario, pero no es necesario realizar pruebas. La “ejecución” inicial en una unidad USB demostró que todo era predecible, confiable y claro. Además, no se requieren manipulaciones por parte del servidor.

Compartir en red un token criptográfico entre usuarios basado en usbip

Naturalmente, cuando se trabaja directamente con el token, no todo salió como se esperaba: con una conexión física en el administrador de dispositivos, el token se registra como 2 dispositivos (WUDF y una tarjeta inteligente), y con una conexión de red solo como WUDF (aunque esto es suficiente para solicitar un código PIN).

Compartir en red un token criptográfico entre usuarios basado en usbip

También resulta que el brutal "taskkill" no es tan severo, y cerrar la conexión en el cliente es problemático e incluso si fue exitoso, no garantiza cerrarla en el servidor.

Habiendo sacrificado todas las consolas del cliente, el segundo script tomó la forma:

ping 127.0.0.1 -n 180 > nul
taskkill /IM usbip.exe /F /T  > nul
ping 127.0.0.1 -n 10 > nul
taskkill /IM conhost.exe /F /T  > nul

aunque su efectividad es inferior al 50%, ya que el servidor obstinadamente seguía dando por abierta la conexión.

Los problemas con la conexión me llevaron a pensar en actualizar el lado del servidor.

parte del servidor

Lo que usted necesita:

  1. Desconectar a los usuarios inactivos del servicio.
  2. Vea quién está usando actualmente (o todavía tomando prestado) el token.
  3. Vea si el token está conectado a la computadora.

Estos problemas se resolvieron utilizando los servicios crontab y apache. La naturaleza discreta de reescribir el estado de los resultados de monitoreo de los puntos 2 y 3 que nos interesan indica que el sistema de archivos se puede ubicar en el ramdrive. Línea agregada a /etc/fstab

tmpfs   /ram_drive      tmpfs   defaults,nodev,size=64K         0       0

Se ha creado una carpeta de scripts con scripts en la raíz: desmontar-montar el token usb_restart.sh

usbip unbind -b 1-2
sleep 2
usbip bind -b 1-2
sleep 2
usbip attach --remote=localhost --busid=1-2
sleep 2
usbip detach --port=00

obtener una lista de dispositivos activos usblist_id.sh

usbip list -r 127.0.0.1 | grep ':' |awk -F ":" '{print $1}'| sed s/' '//g | grep -v "^$" > /ram_drive/usb_id.txt

obtener una lista de IP activas (con modificación posterior para mostrar las ID de usuario) usbip_client_ip.sh

netstat -an | grep :3240 | grep ESTABLISHED|awk '{print $5}'|cut -f1 -d":" > /ram_drive/usb_ip_cli.txt

el crontab en sí se ve así:

*/5 * * * * /!script/usb_restart.sh > /dev/null 2>&1
* * * * * ( sleep 30 ; /!script/usblist_id.sh > /dev/null)
* * * * * (sleep 10 ; /!script/usbip_client_ip.sh > /dev/hull)

Entonces tenemos: cada 5 minutos puede conectarse un nuevo usuario, independientemente de quién trabajó con el token. La carpeta /ramdrive está conectada al servidor http mediante un enlace simbólico, en el que se guardan 2 archivos de texto que muestran el estado del servidor usbip.

Parte siguiente: “Feo en envoltorio”

Opción II. Para complacer un poco al usuario con al menos alguna interfaz menos intimidante. Desconcertado por el hecho de que los usuarios tienen diferentes versiones de Windows con diferentes marcos, diferentes derechos, un enfoque menos problemático que Lázaro No lo encontré (por supuesto, estoy a favor de C#, pero no en este caso). Puede iniciar archivos bat desde la interfaz en segundo plano, minimizados, pero sin las pruebas adecuadas, personalmente soy de la opinión: es necesario visualizarlo para recopilar la insatisfacción del usuario.

Compartir en red un token criptográfico entre usuarios basado en usbip

La interfaz y el software resolvieron las siguientes tareas:

  1. Muestra si el token está actualmente ocupado.
  2. En el primer lanzamiento, la configuración inicial implica generar los archivos bat "correctos" que implementan el inicio y la interrupción de una sesión con el servidor token. En inicios posteriores, implementación del modo “servicio” mediante contraseña.
  3. Comprueba la presencia de una conexión con el servidor, como resultado de lo cual sondea si está ocupado o muestra mensajes sobre problemas. Cuando se reanuda la comunicación, el programa comienza a funcionar automáticamente en modo normal.

El trabajo con el servidor WEB se implementa utilizando el complemento fphttpclient adicional.


Aquí habrá un enlace a la versión actual del cliente.

También hay más consideraciones sobre el tema del artículo, así como un entusiasmo inicial parcial por el producto VirtualHere con sus características...

Fuente: habr.com

Añadir un comentario