SFTP構成ファイルの出力に関する問題

SFTP構成ファイルの出力に関する問題

SFTPログインが機能しなくなり、エラー127が発生した後、SSH接続が/etc/profile.d/にインストールされたスクリプトを介していくつかの出力を生成したことがわかりました。

以前のバージョンのsshdでは、「UseLogin」というオプションがデフォルトで「no」に設定されているため、構成ファイルの内容は実行されませんでした。このオプションはもう存在しなくなり、デフォルトの動作が変更されたようです。

sshd_configで今置き換えられました。

Subsystem  sftp  /usr/lib/ssh/sftp-server

渡す

Subsystem sftp  internal-sftp

これがうまくいくようです(SFTPが動作しています)。

しかし、私たち全員が知っているように、その理由がわからない場合は、まだ解決されていません。

誰かがこれを説明できますか?より良い「修正」を提案しますか?

修正するSLES15.4(openssh-server-8.4p1)

ベストアンサー1

SFTP は SSH を転送手段として使用します。すべてのSFTPクライアントは、SSHサーバーがSFTPサーバー(例えば)との通信を確立したいと考えていますsftp-server

少なくともOpenSSHでは、SSHサーバーが何かを実行するように指示されたら、ターゲットユーザーのシェルを使用してそれを行います。

Subsystem …サブシステム(カスタムサブシステムでもあります)は、項目を追加することで定義できますsshd_config。その場合でも、提供されたコマンドはユーザーのシェルで実行されます。標準サブシステムがに指定されている場合、sftpこれが発生します/usr/lib/ssh/sftp-server

SFTPクライアントがSFTPサーバーと通信しようとしているときにシェル(または他のもの)がいくつかの「ガベージ」を印刷すると、SFTPプロトコルの範囲外で通信が中断されます。

SSHサーバーがユーザーのシェルを使用している限り、すべてが完全に確実に機能するようにするオプションはありません。このためです一般的に言えば:

  1. ユーザーのシェルは何でも構いません。
  2. 通常のシェルでもいくつかのファイルを取得できます。一部のシェルはこれを実行しないように指示できますが、移植可能なオプションがないため、クライアントはシェルを呼び出すときにSSHサーバーにカスタムオプションを使用するように指示できません。
  3. ソースファイルは何かを印刷することも、何かを印刷することもできます。

ユーザーシェルを回避する唯一の方法は、SSHサーバーによって内部的に処理されるサブシステムを使用することです。 AFAIKsshd現在OpenSSHの唯一の内部サブシステムはinternal-sftp

internal-sftpシェルに頼らないので問題を解決しました。

もう1つの修正方法は、SFTPサーバー以外のサーバーがSSHサーバーによって提供される標準ストリームを使用していることを確認することです。回避策には、ユーザーのシェルを沈黙させることが含まれます。そしてシェルは実際に要求されたコマンドを実行しています(たとえば/usr/lib/ssh/sftp-server、サーバーへのrootアクセス権を持つ人やユーザー自身が簡単に破損する可能性があります)。

比較のためのいくつかの興味深いケース:

おすすめ記事