私はレガシープロトコルを持っています。認証のサポートもセッションのサポートもありません。クライアントからサーバーにクリアテキストで送信されるコマンドは何でも簡単に実行でき、サーバーは受け取ったものを喜んで実行します。オートキューから..
1 つの解決策は、tls を使用してレガシー サービスを再実装することです。これはうまくいくでしょうが、それは苦痛の世界になる可能性があり、もっと簡単なものを見つけたいと思っています. 私は ssh よりも tls を好む議論を知っています。この場合、簡単な勝利よりもわずかな改善である、より大きなリスクの高い再実装よりも簡単で大きな改善を好むという議論もあります。
私は考えています:
- /etc/passwd shell=/usr/bin/legacy-protocol-handler で「プロトコルユーザー」を作成します
- クライアントは ssh 経由で接続し、コマンドをシェルに書き込むことでコマンドを送信します
- sshd はプロトコル ハンドラー (ユーザー シェル) を実行し、コマンドを渡します。
- プロトコル ハンドラがコマンドを処理し、応答を返し、電話を切る
- sshd は応答をマーシャリングし、ネットワーク経由で送信します
- これにより、認証とトランスポートの暗号化が解決され、プロトコルハンドラーのコードをほとんど変更していません
この一般的な考え方は、上記よりもさらに簡単です。UNIX ユーザー システムは、シェルの代わりにカスタム プロトコル ハンドラを実行するためだけに使用されています。接続ごとにプロトコル ハンドラを実行します。例: ssh-listen --port 1224 --accept-only-this-user publickey.bin --execute /usr/bin/legacy-protocol-handler
質問:
- これは合理的な解決策ですか(意図したとおりにsshdを使用していないようです..)
- このアプローチの欠点は何ですか
- 同様の努力に対して立派なセキュリティを得るより良い方法はありますか
- sshd を通過する代わりに tls リスナーを使用できる同様のアプローチはありますか