I forbindelse med ændringerne i lovgivningen om tillidstjenester ("Om elektroniske tillidstjenester" i Ukraine) er der opstået et behov for, at flere afdelinger arbejder med nøgler, der er placeret på tokens (i øjeblikket er spørgsmålet om antallet af hardware-nøgler stadig åbent).
Som et værktøj med de laveste omkostninger (gratis) faldt valget straks på . Serveren på Ubintu 18.04 fungerede takket være en publikation og blev med succes testet på flere USB-nøgler (på det tidspunkt var der ikke mulighed for at bruge en token). Ingen særlige problemer, bortset fra monopolret (reservation til brugeren) blev opdaget på det tidspunkt. For at organisere adgang for flere brugere (mindst to, i starten) er det nødvendigt at dele deres adgang i tid og få dem til at arbejde skiftevis.
Spørgsmålet opstod: Hvordan kan man med færrest mulige omkostninger sikre, at alle har det til at fungere ...
Den primitive del

Variant 1. Flere genveje til bat-filer, nemlig
a) Tilslutning af adgangsnøglen.
b) Bevidst frakobling.
Punkt "b" er tvivlsomt, derfor blev det besluttet at give en arbejdstid på 3 minutter med nøglen.
En særegenhed ved usbip-klienten er, at efter lanceringen hænger den i konsollen; forbindelsen kan "groft" lukkes fra både klient- og serversiden uden at afbryde konsolsessionen.
Her er hvad der fungerer normalt for os:
første: tilslutning on.bat
usbip -a 172.16.12.26 4-1
msg * "Nøgle/token ikke tilgængelig eller optaget "anden: frakobling off.bat
ping 127.0.0.1 -n 180
taskkill /IM usbip.exe /Fuden at stole på brugerens opmærksomhed blev scriptsene samlet i token.bat
on.bat | off.batHvad får vi: alle filer er i én mappe, lancering med filen token.bat; hvis forbindelsen lukkes af brugeren, vises der straks en meddelelse om, at nøglen ikke er tilgængelig, i et andet tilfælde først efter 180 pings. De givne kodestykker kan udstyres med "@ECHO OFF" og retningen af konsollen til "> nul" for ikke at chokere brugeren for meget, men til teststart er det ikke nødvendigt. Den første "køring" på USB-nøglen viste, at alt er forudsigeligt-pålideligt-præcist. Desuden kræver serveren ingen manipulationshandlinger.

Det viste sig, at når der arbejdes direkte med tokenet, gik alt ikke som forventet: ved fysisk tilslutning i enhedshåndteringen registreres tokenet som 2 enheder (WUDF og smartkort), mens det ved netværksforbindelse kun registreres som WUDF (selvom det er tilstrækkeligt til at anmode om PIN-koden).

Det viste sig også, at det brutale 'taskkill' ikke er så strengt, og lukning af forbindelsen på klienten er problematisk, og selv hvis det lykkes, garanterer det ikke, at den lukkes på serveren.
Efter at have ofret alle konsoller på klienten, tog det andet script 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 > nulselvom dets effektivitet er under 50%, da serveren insisterede på at betragte forbindelsen som ikke lukket.
Problemer med forbindelsen førte til overvejelser om opgradering på serversiden.
Serverdel
Hvad der er nødvendigt:
- Frakobling af inaktive brugere fra tjenesten.
- At se, hvem der bruger (eller stadig optager) tokenet.
- At se, om tokenet er tilsluttet selve computeren.
Disse opgaver blev besluttet at løse ved hjælp af crontab- og apache-tjenester. Diskrethed i overvågningens resultatgenoprettelse for punkterne 2 og 3 viser, at filsystemet kan placeres på en ramdrive. Strengen blev tilføjet til /etc/fstab
tmpfs /ram_drive tmpfs defaults,nodev,size=64K 0 0
I roden blev der oprettet en mappe kaldet script med scripts: afmontering-montage af 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=00hentning af listen over aktive enheder usblist_id.sh
usbip list -r 127.0.0.1 | grep ':' | awk -F ":" '{print $1}' | sed s/' '//g | grep -v "^$" > /ram_drive/usb_id.txthentning af listen over aktive IP'er (med efterfølgende tilføjelse med visning af brugeridentifikatorer) usbip_client_ip.sh
netstat -an | grep :3240 | grep ESTABLISHED | awk '{print $5}' | cut -f1 -d":" > /ram_drive/usb_ip_cli.txtCrontab ser således ud:
* /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: en ny bruger kan tilsluttes hvert 5. minut, uanset hvem der arbejdede med tokenet. Til HTTP-serveren er mappen /ramdrive tilsluttet via en symlink, hvor 2 tekstfiler gemmes, der viser status for serveren usbip.
Næste del: 'Ubehageligt indpakning'
II variant. At lidt glæde brugeren med en mindre skræmmende grænseflade. Da brugerne har forskellige versioner af Windows med forskellige rammer og rettigheder, er der ikke nogen mindre problematisk tilgang end , som jeg ikke fandt (jeg er helt klart for C#, men ikke i dette tilfælde). Man kan køre bat-filer fra grænsefladen, også i baggrunden og minimere dem, men uden ordentlig testning mener jeg personligt, at man skal visualisere for at indsamle brugernes utilfredshed.

Følgende opgaver blev løst med grænsefladen og den softwaremæssige del:
- Visning af, om tokenet er optaget lige nu.
- Ved første opstart implementeres den indledende konfiguration med generering af de "korrekte" bat-filer, der udfører starten og afslutningen af sessionen med serverens token. Ved efterfølgende opstarter implementeres "service"-tilstand med kodeord.
- Kontrol af forbindelsen til serveren, hvorpå spørgsmålet om optagelse foretages, eller der vises beskeder om problemer. Når forbindelsen genoptages, begynder programmet automatisk at fungere i normal tilstand.
Arbejdet med WEB-serveren er implementeret ved hjælp af det ekstra værktøj fphttpclient.

der er også fortsættelse af tankerne om emnet i artiklen, samt delvis indledende begejstring for produktet VirtualHere med dets særlige funktioner…
Kilde: habr.com
