I samband med ändringen av lagstiftningen angående betrodda tjänster ("Om elektriska betrodda tjänster" Ukraina), uppstod behovet för flera avdelningar på företaget att arbeta med nycklar, som finns på token (för närvarande är frågan om antalet hårdvarunycklar fortfarande öppen).
Som ett kostnadseffektivt verktyg (gratis) föll valet direkt på . Servern på Ubuntu 18.04 fungerade tack vare publiceringen och testades framgångsrikt på flera flashminnen (på grund av bristen på token då). Inga särskilda problem, förutom monopolägande (reservation för användaren) vid den tidpunkten upptäcktes. Det är klart att för att organisera åtkomst för flera användare (åtminstone två, i början) är det nödvändigt att dela upp deras åtkomst över tid och få dem att arbeta i tur och ordning.
Frågan uppstod: Hur kan vi göra så att alla får det att fungera med så lite krångel som möjligt…
Partiet är grovt

Alternativ 1. Flera genvägar till bat-filer, nämligen
a) Anslutning av åtkomstnyckeln.
b) Medveten avstängning.
Punkt "b" är kontroversiell, så det beslutades att ge en arbetstid på 3 minuter med nyckeln.
Ett kännetecken för usbip-klienten är att efter att den startats så hänger den kvar i konsolen, utan att avbryta konsolsessionen. Anslutningen kan "grovt" stängas från klientens eller serverns sida.
Detta fungerade bra för oss:
första: anslutning on.bat
usbip -a 172.16.12.26 4-1
msg * "Signaturen/token är inte tillgänglig eller upptagen"andra: avstängning off.bat
ping 127.0.0.1 -n 180
taskkill /IM usbip.exe /Futan att lita på användarens medvetenhet, slogs skripten samman i token.bat
on.bat | off.batResultatet blir: alla filer finns i samma mapp, körs med filen token.bat. Om anslutningen stängs av användaren ges omedelbart ett meddelande om att nyckeln inte är tillgänglig, i annat fall, först efter 180 pingar. De angivna kodraderna kan utrustas med "@ECHO OFF" och riktningen av konsolen i "> nul" så att användaren inte blir allt för chockad, men för testkörning är det inte nödvändigt. Den initiala "testningen" på USB-minnet visade att allt är förutsägbart - pålitligt - och klart. Dessutom behövs inga manipulationer från serverns sida.

Självklart gick allt inte som förväntat när vi arbetade direkt med token: vid fysisk anslutning i enhetschefen registreras token som 2 enheter (WUDF och smartkort), men vid nätverksanslutning endast som WUDF (även om detta är tillräckligt för att begära PIN-koden).

Det visade sig också att den brutala "taskkill" inte är så grym och att stänga anslutningen på klienten är problematiskt, och även om det lyckades, garanterar det inte att anslutningen stängs på servern.
Genom att offra alla konsoler på klienten tog det andra skriptet följande form:
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 > nulMen dess effektivitet är mindre än 50%, eftersom servern envist fortsatte att anse att anslutningen var öppen.
Problem med anslutningen ledde till tankar på att modernisera serverdelen.
Serverdel
Vad som behövs:
- Koppla från inaktiva användare från tjänsten.
- Se vem som för närvarande använder (eller fortfarande använder) token.
- Se om token är ansluten till datorn.
Det bestämdes att lösa dessa uppgifter med hjälp av tjänsterna crontab och apache. Diskretheten i att skriva om status för övervakning av punkterna 2 och 3 indikerar att filsystemet kan placeras på ramdrive. En rad lades till /etc/fstab
tmpfs /ram_drive tmpfs defaults,nodev,size=64K 0 0
I roten skapades en mapp som heter script med skripten: 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=00erhålla 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.txterhålla lista över aktiva IP (med efterföljande anpassning för att visa användaridentifierare) usbip_client_ip.sh
netstat -an | grep :3240 | grep ESTABLISHED | awk '{print $5}' | cut -f1 -d":" > /ram_drive/usb_ip_cli.txtsjä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/null)Så vi har: var femte minut kan en ny användare ansluta, oavsett vem som arbetade med token. Till http-servern är mappen /ramdrive ansluten via en symbolisk länk, där två textfiler sparas och visar serverns tillstånd usbip.
Nästa del: "Oattraktivt i förpackningen"
II alternativ. Att ge användaren en något mindre skrämmande gränssnitt. Med tanke på att användare har olika versioner av Windows med olika ramverk och rättigheter, finns det inget mer problemfritt tillvägagångssätt än jag har inte hittat (även om jag föredrar C#, men inte i det här fallet). Att köra bat-filer från gränssnittet kan göras i bakgrunden, minimerade, men utan korrekt testning, personligen anser jag att man bör visualisera för att samla användarnas missnöje.

Följande uppgifter löstes med gränssnittet och mjukvarudelen:
- Visa om token är upptagen för tillfället.
- Vid första starten sker en initial konfiguration med generering av "korrekta" bat-filer som implementerar start och avbrott av arbetssessionen med token-servern. Vid efterföljande starter implementeras ett "service"-läge med lösenord.
- Kontroll av kontakten med servern, vars resultat används för att fråga om upptagenhet eller visa meddelanden om problem. Vid återupptagande av kontakten börjar programmet automatiskt arbeta i normalt läge.
Arbetet med webservern har implementerats med hjälp av den ytterligare komponenten fphttpclient.

det finns också vidare tankar kring ämnet i artikeln, liksom en del av det ursprungliga berömmet för produkten VirtualHere med dess egenskaper...
Källa: habr.com
