În legătură cu modificarea legislației referitoare la serviciile de încredere („Despre serviciile electronice de încredere” Ucraina), a apărut necesitatea ca mai multe departamente ale companiei să lucreze cu chei stocate pe token-uri (în prezent, problema numărului de chei hardware este încă deschisă).
Ca instrument cu cele mai scăzute costuri (gratuit), alegerea s-a îndreptat imediat spre . Serverul pe Ubintu 18.04 a început să funcționeze datorită publicației și a fost testat cu succes pe mai multe unități flash (în lipsa, la acel moment, a token-ului). Nu au fost identificate probleme speciale, în afară de monopolul deținătorului (rezervarea pentru utilizator) în acel moment. Este clar că pentru a organiza accesul mai multor utilizatori (măcar două, pentru început) este necesară împărțirea accesului în timp și obligarea lor să lucreze pe rând.
S-a pus întrebarea: Cum putem, cu cele mai puține manevre, să facem ca tuturor să le funcționeze…
O parte mai rudimentară

Varianta I. Câteva scurtături către fișierele bat, și anume
a) Conectarea cheii de acces.
b) Deconectarea intenționată.
Punctul „b” este discutabil, de aceea s-a decis să se aloce un timp de lucru cu cheia de 3 minute.
Particularitatea clientului usbip este că după ce este pornit, rămâne suspendat în consolă; fără întreruperea sesiunii consolei, conectarea se poate încheia „brutal” din partea clientului și, de asemenea, din partea serverului.
Iată ce a funcționat corect pentru noi:
primul: conectarea on.bat
usbip -a 172.16.12.26 4-1
msg * "Semnătura/token-ul nu sunt disponibile sau sunt ocupate "al doilea: deconectarea off.bat
ping 127.0.0.1 -n 180
taskkill /IM usbip.exe /Ffără a conta pe conștiința utilizatorului, scripturile au fost unite în token.bat
on.bat | off.batCe obținem: toate fișierele se află într-un singur folder, lansarea se face prin fișierul token.bat, iar dacă conexiunea este încheiată de utilizator, imediat apare un mesaj despre indisponibilitatea cheii; în alt caz, doar după 180 de pings. Liniile de cod date pot fi dotate cu „@ECHO OFF” și redirecționate în consolă către „> nul” pentru a nu șoca prea mult utilizatorul, dar pentru lansarea în testare nu este necesar. Prima „rundă” pe unitatea USB a arătat că totul este previzibil-de încredere-clar. În plus, din partea serverului nu sunt necesare manipulări.

Desigur, în timpul lucrului direct cu tokenul, totul nu a decurs așa cum era de așteptat: la conectarea fizică în gestionarul de dispozitive, tokenul se înregistrează ca 2 dispozitive (WUDF și card smart), iar când este conectat prin rețea, doar ca WUDF (deși pentru solicitarea codului PIN, asta este suficient).

De asemenea, s-a dovedit că „taskkill” nu este chiar atât de dur, iar închiderea conexiunii pe client este problematică și chiar dacă reușești, nu garantează închiderea acesteia pentru el pe server.
Dedicând toate consolele pe client, al doilea script a luat 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 > nuldeși eficiența sa este sub 50%, pentru că serverul continua să considere conexiunea deschisă.
Problemele de conexiune au dus la gânduri despre modernizarea părții server.
Partea server
Ce este nevoie:
- Deconectarea utilizatorilor inactivi de la serviciu.
- A vedea cine folosește acum (sau mai ocupă) tokenul.
- A vedea dacă tokenul este conectat la computer.
Rezolvarea acestor sarcini a fost decisă prin intermediul serviciilor crontab și apache. Discretizarea actualizării stării rezultatelor monitorizării punctelor 2 și 3 sugerează că sistemul de fișiere poate fi localizat pe ramdrive. În /etc/fstab a fost adăugată linia
tmpfs /ram_drive tmpfs defaults,nodev,size=64K 0 0
În rădăcină a fost creat un folder script cu scripturi: demontare-montare 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=00obținerea listei de dispozitive active usblist_id.sh
usbip list -r 127.0.0.1 | grep ':' |awk -F ":" '{print $1}'| sed s/' '//g | grep -v "^$" > /ram_drive/usb_id.txtobținerea listei de IP-uri active (cu modificări ulterioare pentru afișarea identificatorilor utilizatorilor) usbip_client_ip.sh
netstat -an | grep :3240 | grep ESTABLISHED|awk '{print $5}'|cut -f1 -d":" > /ram_drive/usb_ip_cli.txtîntreg crontab arată astfel:
*/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)Așadar, avem: la fiecare 5 minute poate fi conectat un nou utilizator, indiferent de cine a lucrat cu tokenul. La serverul http, un folder /ramdrive este conectat printr-un link simbolic, în care sunt salvate 2 fișiere text, care arată starea serverului usbip.
Partea următoare: „Urât în ambalaj”
Varianta II. Un pic de bucurie pentru utilizator printr-o interfață mai puțin înfricoșătoare. Având în vedere că utilizatorii au diferite versiuni de Windows cu cadre diferite, precum și drepturi diferite, nu am găsit o abordare mai puțin problematică decât în acest caz (deși sunt de partea C#, dar nu în acest context). Se pot rula fișiere bat din interfață, chiar și în fundal, minizate, dar fără o testare adecvată, personal cred că este necesar să vizualizăm pentru a aduna nemulțumirile utilizatorilor.

Interfața și partea programatică au rezolvat următoarele sarcini:
- Afișarea stării de ocupare a tokenului în acest moment.
- La prima rulare, configurarea inițială cu generarea fișierelor bat „corecte” care implementează pornirea și întreruperea sesiunii de lucru cu serverul tokenului. La rulările ulterioare, implementarea în modul „serviciu” cu parolă.
- Verificarea existenței conexiunii cu serverul, în urma căreia se realizează întrebarea acestuia despre ocupare sau se afișează mesaje despre probleme. La restabilirea conexiunii, programul începe automat să funcționeze în mod normal.
Lucrul cu serverul WEB a fost realizat prin intermediul pluginului suplimentar fphttpclient.

există, de asemenea, un continuare a gândurilor despre subiectul articolului, precum și oparte din entuziasmul inițial pentru produsul VirtualHere și caracteristicile sale…
Sursa: habr.com
