USBIP ベースのユーザー間での暗号トークンのネットワーク共有

信託サービスに関する法律の変更 (「電子信託サービスについて」ウクライナ) に関連して、企業ではトークンに配置されたキーを扱うために複数の部門が必要になっています (現時点では、ハードウェア キーの数の問題はまだ未解決です) )。

最も低コスト(無料)のツールとして、すぐに選択肢が決まりました。 ウスビ。 出版物のおかげで、Ubintu 18.04 上のサーバーが動作し始めました。 USB/IPを飼いならす いくつかのフラッシュ ドライブでのテストに成功しました (当時はトークンがなかったため)。 この時点では独占所有権(使用者留保)以外に特段の問題は認められなかった。 複数のユーザー (最初は少なくとも XNUMX 人) のアクセスを整理するには、ユーザーのアクセスを時間内に分割し、順番に作業させる必要があることは明らかです。

問題は、すべての人にとってうまくいくように、最小限のダンスでそれを行うにはどうすればよいかということでした...

部分が不器用です

USBIP ベースのユーザー間での暗号トークンのネットワーク共有
オプションXNUMX。 BAT ファイルへのいくつかのショートカット。
a) アクセスキーの接続。
b) 意図的に切断する。

段落「б» 物議を醸したため、キーを操作する時間を 3 分とすることが決定されました。

usbip クライアントの特徴は、起動後、コンソール内でハングしたままになることです。コンソール セッションを中断することなく、クライアント側からもサーバー側からも接続を「大まかに」閉じることができます。

私たちにとってうまくいったことは次のとおりです。

最初: 接続 on.bat

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

XNUMX番目: シャットダウン オフバット

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 ベースのユーザー間での暗号トークンのネットワーク共有

また、残忍な「タスクキル」はそれほど深刻ではなく、クライアント上で接続を閉じるには問題があり、たとえ成功したとしてもサーバー上で接続を閉じることが保証されないことも判明しました。

クライアント上のすべてのコンソールを犠牲にした後、XNUMX 番目のスクリプトは次の形式になりました。

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 の監視結果の状態の書き換えの離散的な性質は、ファイル システムが RAM ドライブ上に存在する可能性があることを示しています。 /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 サーバーに接続されており、そこには usbip サーバーのステータスを示す 2 つのテキスト ファイルが保存されます。

次のパート: 「ラッパーの中の醜い」

オプション II。 少なくとももう少し威圧感の少ないインターフェイスでユーザーを少しでも喜ばせるため。 ユーザーがさまざまなフレームワーク、さまざまな権利を備えたさまざまなバージョンの Windows を使用しているという事実に困惑しており、問題の少ないアプローチです。 ラザロ 見つかりませんでした (もちろん C# を支持しますが、この場合はそうではありません)。 最小化されたインターフェイスからバックグラウンドでバット ファイルを起動できますが、適切なテストを行わないと、ユーザーの不満を収集するには視覚化する必要があると個人的には考えています。

USBIP ベースのユーザー間での暗号トークンのネットワーク共有

次のタスクはインターフェイスとソフトウェアによって解決されました。

  1. トークンが現在ビジー状態かどうかを表示します。
  2. 最初の起動時の初期セットアップには、トークン サーバーとのセッションの起動と中断を実装する「正しい」バット ファイルの生成が含まれます。 以降の起動時は、パスワードを使用した「サービス」モードを実装します。
  3. サーバーとの接続の存在を確認し、その結果としてサーバーがビジー状態かどうかをポーリングするか、問題に関するメッセージを表示します。 通信が再開されると、プログラムは自動的に通常モードで動作を開始します。

WEB サーバーの操作は、追加の fphttpclient スナップインを使用して実装されます。


ここにクライアントの現在のバージョンへのリンクがあります

また、記事の主題に関するさらなる考察や、VirtualHere 製品とその機能に対する初期の熱意の一部も含まれています...

出所: habr.com

コメントを追加します