基於usbip的用戶之間加密令牌的網絡共享

由於信託服務立法的變化(「關於電子信託服務」烏克蘭),企業需要多個部門來處理位於代幣上的密鑰(目前,硬體密鑰的數量問題仍然懸而未決) )。

作為成本最低(免費)的工具,選擇立刻就落在了 usbip。 由於該發布,Ubintu 18.04 上的伺服器開始工作 馴服 USB/IP 並在多個閃存驅動器上成功測試(由於當時缺少令牌)。 當時除了壟斷所有權(為使用者保留)之外沒有發現任何特殊問題。 顯然,為了組織多個用戶(至少兩個)的訪問,有必要及時劃分他們的訪問權限並強制他們輪流工作。

問題是:我怎麼能用最少的舞蹈來做到這一點,以便一切都適合每個人......

該部分很笨拙

基於usbip的用戶之間加密令牌的網絡共享
選項XNUMX。 bat檔的幾個快捷方式,分別是
a) 連線存取密鑰。
b) 故意斷開連線。

段落 ”б» 有爭議,因此決定將金鑰的使用時間定為 3 分鐘。

usbip 用戶端的特點是,啟動後,它仍然掛在控制台中;在不中斷控制台會話的情況下,您可以從客戶端和伺服器端「粗略地」關閉連線。

這對我們來說效果很好:

第一:連接 蝙蝠

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

第二:關機 關閉蝙蝠

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

不依賴使用者的意識,將腳本組合成 令牌.bat

on.bat | off.bat

會發生什麼事:所有檔案都位於同一個資料夾中,由token.bat 檔案啟動,如果連線關閉,使用者會立即收到有關金鑰不可用的訊息,在另一種情況下,僅在180 次ping後才會收到訊息。 上述幾行程式碼可以配備“@ECHO OFF”並將控制台方向設為“> nul”,以免對使用者造成太大衝擊,但不需要執行測試。 在 USB 驅動器上的初始「運行」表明一切都是可預測的、可靠且清晰的。 此外,伺服器端不需要任何操作。

基於usbip的用戶之間加密令牌的網絡共享

當然,當直接使用令牌時,一切都不會按預期進行:透過裝置管理員中的實體連接,令牌被註冊為 2 個裝置(WUDF 和智慧卡),並且僅作為 WUDF 進行網路連接(儘管這足以請求PIN 碼)。

基於usbip的用戶之間加密令牌的網絡共享

事實證明,殘酷的「taskkill」並沒有那麼嚴重,在客戶端關閉連線是有問題的,即使成功了,也不能保證在伺服器上為他關閉。

犧牲了客戶端上的所有控制台後,第二個腳本採用了以下形式:

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

儘管其有效性低於 50%,因為伺服器頑固地繼續認為連線已開啟。

連線問題引發了升級伺服器端的想法。

伺服器部分

你所需要的:

  1. 中斷非活動用戶與服務的連線。
  2. 查看誰目前正在使用(或仍在藉用)該代幣。
  3. 查看令牌是否連接到電腦本身。

使用 crontab 和 apache 服務解決了這些問題。 重寫我們感興趣的點2和3的監控結果的狀態的離散性表明檔案系統可以位於ramdrive上。 已將行新增至 /etc/fstab

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

根目錄下已經建立了一個包含腳本的腳本資料夾:卸載-掛載令牌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

取得活動設備清單 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

取得活動 IP 清單(隨後進行修改以顯示使用者 ID) usbip_client_ip.sh

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

crontab 本身看起來就是這樣:

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

所以我們有:每 5 分鐘就有一個新用戶可以連接,無論誰使用了該令牌。 /ramdrive資料夾使用符號連結連接到http伺服器,其中保存了2個文字文件,顯示了usbip伺服器的狀態。

下一部分:“包裝紙裡的醜陋”

選項二。 至少用一些不那麼令人生畏的介面來取悅用戶。 令人困惑的是,使用者擁有不同版本的 Windows,具有不同的框架、不同的權限,以及問題較少的方法 拉撒路 我沒有找到它(我當然支持 C#,但在本例中不是)。 您可以從後台介面啟動bat文件,最小化,但如果沒有適當的測試,我個人的觀點是:您需要將其視覺化以收集用戶的不滿。

基於usbip的用戶之間加密令牌的網絡共享

透過介面和軟體解決了以下任務:

  1. 顯示令牌目前是否忙碌。
  2. 首次啟動時,初始設定涉及產生「正確的」bat 文件,這些文件實現與令牌伺服器的會話的啟動和中斷。 在隨後的啟動中,使用密碼執行「服務」模式。
  3. 檢查與伺服器的連線是否存在,結果是輪詢伺服器是否繁忙或顯示有關問題的訊息。 當通訊恢復時,程式自動開始在正常模式下運作。

使用 WEB 伺服器是透過使用附加的 fphttpclient 管理單元來實現的。


這裡是客戶端當前版本的鏈接

還有對文章主題的進一步考慮,以及對 VirtualHere 產品及其功能的部分最初熱情...

來源: www.habr.com

添加評論