Berbagi jaringan token kriptografi antara pengguna berbasis usbip

Sehubungan dengan perubahan undang-undang mengenai layanan kepercayaan (“Tentang layanan kepercayaan elektronik” Ukraina), perusahaan memerlukan beberapa departemen untuk bekerja dengan kunci yang terletak pada token (saat ini, pertanyaan tentang jumlah kunci perangkat keras masih terbuka ).

Sebagai alat dengan biaya paling murah (gratis), pilihan langsung jatuh pada usbip. Server di Ubintu 18.04 mulai berfungsi berkat publikasinya Menjinakkan USB/IP dan berhasil diuji pada beberapa flashdisk (karena kurangnya token pada saat itu). Tidak ada masalah khusus selain kepemilikan monopoli (reservasi untuk pengguna) yang teridentifikasi pada saat itu. Jelas bahwa untuk mengatur akses bagi beberapa pengguna (setidaknya dua, untuk memulai), perlu membagi akses mereka dalam waktu dan memaksa mereka untuk bekerja secara bergiliran.

Pertanyaannya adalah: Bagaimana saya bisa melakukannya dengan jumlah tarian yang paling sedikit sehingga semuanya berjalan baik untuk semua orang...

Bagiannya kikuk

Berbagi jaringan token kriptografi antara pengguna berbasis usbip
Pilihan XNUMX. Beberapa shortcut untuk file bat yaitu
a) Menghubungkan kunci akses.
b) Sengaja memutuskan hubungan.

Gugus kalimat "б» kontroversial, jadi diputuskan untuk memberikan jumlah waktu untuk bekerja dengan kunci sebesar 3 menit.

Keunikan klien usbip adalah setelah diluncurkan, ia tetap hang di konsol, tanpa mengganggu sesi konsol, Anda dapat menutup koneksi "secara kasar" dari sisi klien dan juga dari sisi server.

Inilah yang berhasil bagi kami:

pertama: koneksi di.bat

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

kedua: mematikan mati.bat

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

Tanpa bergantung pada kesadaran pengguna, skrip tersebut digabungkan menjadi token.bat

on.bat | off.bat

Apa yang terjadi: semua file berada di folder yang sama, diluncurkan oleh file token.bat, jika koneksi ditutup, pengguna segera menerima pesan tentang kunci tidak tersedia, dalam kasus lain, hanya setelah 180 ping. Baris kode di atas dapat dilengkapi dengan “@ECHO OFF” dan arah konsol ke “> nul” agar tidak terlalu mengejutkan pengguna, namun tidak perlu menjalankan pengujian. Proses “jalankan” awal pada drive USB menunjukkan bahwa semuanya dapat diprediksi, dapat diandalkan, dan jelas. Selain itu, tidak diperlukan manipulasi dari sisi server.

Berbagi jaringan token kriptografi antara pengguna berbasis usbip

Secara alami, ketika bekerja secara langsung dengan token, semuanya tidak berjalan seperti yang diharapkan: dengan koneksi fisik di pengelola perangkat, token terdaftar sebagai 2 perangkat (WUDF dan kartu pintar), dan dengan koneksi jaringan hanya sebagai WUDF (walaupun ini cukup untuk meminta kode PIN).

Berbagi jaringan token kriptografi antara pengguna berbasis usbip

Ternyata "taskkill" yang brutal juga tidak terlalu parah, dan menutup koneksi pada klien bermasalah dan bahkan jika berhasil, tidak menjamin penutupannya di server.

Setelah mengorbankan semua konsol di klien, skrip kedua berbentuk:

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

meskipun efektivitasnya kurang dari 50%, karena server dengan keras kepala terus menganggap koneksi terbuka.

Masalah koneksi menyebabkan pemikiran untuk meningkatkan sisi server.

Bagian server

Apa yang Anda butuhkan:

  1. Putuskan sambungan pengguna yang tidak aktif dari layanan.
  2. Lihat siapa yang sedang menggunakan (atau masih meminjam) token tersebut.
  3. Lihat apakah token terhubung ke komputer itu sendiri.

Masalah ini diselesaikan dengan menggunakan layanan crontab dan apache. Sifat diskrit dari penulisan ulang keadaan hasil pemantauan poin 2 dan 3 yang kami minati menunjukkan bahwa sistem file dapat ditempatkan di ramdrive. Menambahkan baris ke /etc/fstab

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

Folder skrip dengan skrip telah dibuat di root: melepas-memasang 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

mendapatkan daftar perangkat aktif 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

mendapatkan daftar IP aktif (dengan modifikasi selanjutnya untuk menampilkan ID pengguna) usbip_client_ip.sh

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

crontabnya sendiri terlihat seperti ini:

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

Jadi kita punya: setiap 5 menit, pengguna baru dapat terhubung, terlepas dari siapa yang bekerja dengan token tersebut. Folder /ramdrive terhubung ke server http menggunakan symlink, di mana 2 file teks disimpan, menunjukkan status server usbip.

Bagian selanjutnya: “Jelek dalam bungkusnya”

pilihan II. Untuk sedikit menyenangkan pengguna dengan setidaknya beberapa antarmuka yang tidak terlalu mengintimidasi. Bingung dengan kenyataan bahwa pengguna memiliki versi Windows yang berbeda dengan kerangka kerja yang berbeda, hak yang berbeda, pendekatan yang tidak terlalu bermasalah dibandingkan Lazarus Saya tidak menemukannya (tentu saja saya menggunakan C#, tetapi tidak dalam kasus ini). Anda dapat meluncurkan file bat dari antarmuka di latar belakang, diminimalkan, tetapi tanpa pengujian yang tepat, saya pribadi berpendapat: Anda perlu memvisualisasikannya untuk mengumpulkan ketidakpuasan pengguna.

Berbagi jaringan token kriptografi antara pengguna berbasis usbip

Tugas-tugas berikut diselesaikan oleh antarmuka dan perangkat lunak:

  1. Menampilkan apakah token sedang sibuk.
  2. Pada peluncuran pertama, pengaturan awal melibatkan pembuatan file bat yang “benar” yang mengimplementasikan peluncuran dan interupsi sesi dengan server token. Pada permulaan berikutnya, implementasi mode "layanan" menggunakan kata sandi.
  3. Memeriksa keberadaan koneksi dengan server, sebagai hasilnya ia melakukan polling apakah sedang sibuk atau menampilkan pesan tentang masalah. Ketika komunikasi dilanjutkan, program secara otomatis mulai bekerja dalam mode normal.

Bekerja dengan server WEB diimplementasikan menggunakan snap-in fphttpclient tambahan.


di sini akan ada tautan ke versi klien saat ini

ada juga pertimbangan lebih lanjut mengenai subjek artikel, serta sebagian antusiasme awal terhadap produk VirtualHere dengan fitur-fiturnya...

Sumber: www.habr.com

Tambah komentar