Nätverksdelning av en kryptografisk token mellan usbip-baserade användare

I samband med förändringar i lagstiftningen om förtroendetjänster ("Om elektroniska förtroendetjänster" Ukraina) har företaget ett behov av att flera avdelningar arbetar med nycklar som finns på tokens (för närvarande är frågan om antalet hårdvarunycklar fortfarande öppen ).

Som ett verktyg med lägst kostnad (kostnadsfritt) föll valet direkt på usbip. Servern på Ubintu 18.04 började fungera tack vare publiceringen Tämja USB/IP och framgångsrikt testad på flera flash-enheter (på grund av bristen på en token vid den tiden). Inga särskilda problem förutom monopolägande (reservation för användaren) identifierades vid den tidpunkten. Det är tydligt att för att organisera åtkomst för flera användare (minst två, till att börja med) är det nödvändigt att dela deras åtkomst i tid och tvinga dem att arbeta i tur och ordning.

Frågan var: Hur kan jag göra det med minsta möjliga dans så att allt fungerar för alla...

Delen är klumpig

Nätverksdelning av en kryptografisk token mellan usbip-baserade användare
Alternativ XNUMX. Flera genvägar till bat-filer, nämligen
a) Ansluter åtkomstnyckeln.
b) Avsiktligt koppla bort.

Paragraf "б» kontroversiellt, så det beslutades att ge den tid att arbeta med nyckeln på 3 minuter.

Det speciella med usbip-klienten är att efter att den har startat förblir den hängande i konsolen; utan att avbryta konsolsessionen kan du stänga anslutningen "ungefär" från klientsidan och även från serversidan.

Här är vad som fungerade bra för oss:

först: anslutning on.bat

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

andra: avstängning off.bat

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

Utan att förlita sig på användarens medvetande, kombinerades skripten till token.bat

on.bat | off.bat

Vad händer: alla filerna finns i samma mapp, lanserade av filen token.bat, om anslutningen stängs får användaren omedelbart ett meddelande om att nyckeln inte är tillgänglig, i ett annat fall först efter 180 pingar. Ovanstående kodrader kan utrustas med "@ECHO OFF" och konsolriktningen till "> nul" för att inte chocka användaren för mycket, men det är inte nödvändigt att köra testning. Den första "körningen" på en USB-enhet visade att allt var förutsägbart, pålitligt och tydligt. Dessutom krävs inga manipulationer från serversidan.

Nätverksdelning av en kryptografisk token mellan usbip-baserade användare

Naturligtvis, när man arbetade direkt med token, gick allt inte som förväntat: med en fysisk anslutning i enhetshanteraren registreras token som 2 enheter (WUDF och ett smartkort), och med en nätverksanslutning endast som WUDF (även om detta räcker för att begära en PIN-kod).

Nätverksdelning av en kryptografisk token mellan usbip-baserade användare

Det visar sig också att den brutala "taskkillen" inte är så allvarlig, och att stänga anslutningen på klienten är problematiskt och även om det lyckades, garanterar det inte att det stängs på servern för det.

Efter att ha offrat alla konsoler på klienten tog det andra skriptet formen:

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

även om dess effektivitet är mindre än 50 %, eftersom servern envist fortsatte att betrakta anslutningen som öppen.

Problem med anslutningen ledde till tankar om att uppgradera serversidan.

Server del

Vad du behöver:

  1. Koppla bort inaktiva användare från tjänsten.
  2. Se vem som för närvarande använder (eller fortfarande lånar) token.
  3. Se om token är ansluten till själva datorn.

Dessa problem löstes med hjälp av tjänsterna crontab och apache. Den diskreta karaktären av att skriva om tillståndet för övervakningsresultaten i punkterna 2 och 3 som intresserar oss indikerar att filsystemet kan lokaliseras på ramenheten. Lade till rad till /etc/fstab

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

En skriptmapp med skript har skapats i roten: avmontering-montering av 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

få en lista över aktiva enheter 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

erhålla en lista över aktiva IP-adresser (med efterföljande ändring för att visa användar-ID) usbip_client_ip.sh

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

själva crontab ser ut så här:

*/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)

Så vi har: var 5:e minut kan en ny användare ansluta, oavsett vem som arbetade med token. /ramdrive-mappen är ansluten till http-servern med en symbollänk, i vilken 2 textfiler sparas, som visar statusen för usbip-servern.

Del nästa: "Ugly in a wrapper"

Alternativ II. För att tillfredsställa användaren lite med åtminstone något mindre skrämmande gränssnitt. Förbryllad över det faktum att användare har olika versioner av Windows med olika ramverk, olika rättigheter, ett mindre problematiskt tillvägagångssätt än Lazarus Jag hittade det inte (jag är naturligtvis för C#, men inte i det här fallet). Du kan starta bat-filer från gränssnittet i bakgrunden, minimerade, men utan ordentlig testning är jag personligen av åsikten: du måste visualisera det för att samla missnöje hos användarna.

Nätverksdelning av en kryptografisk token mellan usbip-baserade användare

Följande uppgifter löstes av gränssnittet och programvaran:

  1. Visar om token för närvarande är upptagen.
  2. Vid den första lanseringen innebär den initiala installationen att generera de "korrekta" bat-filerna som implementerar lanseringen och avbrottet av en session med tokenservern. Vid efterföljande start, implementering av "service" -läget med hjälp av ett lösenord.
  3. Kontrollera närvaron av en anslutning till servern, som ett resultat av vilken den frågar om den är upptagen eller visar meddelanden om problem. När kommunikationen återupptas, börjar programmet automatiskt att fungera i normalt läge.

Arbetet med WEB-servern implementeras med hjälp av den extra snapin-modulen fphttpclient.


här kommer en länk till den aktuella versionen av klienten

det finns också ytterligare överväganden om ämnet för artikeln, såväl som delvis initial entusiasm för VirtualHere-produkten med dess funktioner...

Källa: will.com

Lägg en kommentar