質問

質問

質問

SSHサーバーを起動すると、Debianも自動的にSFTPサーバーを起動します。なぜこのように設計されたのですか?

環境:

  • Linux 5.10.0-14-amd64 Debian 5.10.113-1 (2022-04-29) x86_64 GNU/Linux
  • ssh.service - OpenBSDセキュアシェルサーバー

背景

今日私は気づいた:

  • httpリクエストを処理したい場合は、Webサーバー(Apache(2)、Node.jsなど)を起動します。
  • SSHを処理したい場合は、SSHサーバーを起動します。
  • SFTPを処理したいとき... DebianはすでにSFTPサーバーを起動します。

それで調査を少しし、この記事によると378313/default-sftp-server-in-debian-9-stretch、私はSFTPが「(公開)SSHの一部」で始まることを発見しました。これは完全に理解されていますが、懸念事項の分離などにより奇妙に感じられます。

Windowsとは異なり、Debianが私に予期せぬことや余分なことをしていると感じたことはありません。しかし、今日私はそれを感じました。結局私が言ったsystemctl restart sshのはいいえですsystemctl restart ssh-and-also-ftp(後者の命令は作成されました)。

私はUnix / Linuxとその哲学に初めて触れたので、この状況の良い説明をいただきありがとうございます。

答え1

SFTPではありませんが、スケーラブルなコアSSHプロトコルこれは、1つ以上の共通SSH実装(OpenSSH)に組み込まれているため、考慮することができます。標準部品

必要でない場合は/etc/ssh/sshd_config削除するように変更して、サーバーでこの機能を無効にできます。Subsystemsftp-server

たとえば、次の行はsftp-serverSFTPサービスを処理するための外部ユーティリティを定義します。

Subsystem sftp-server

この行は、SFTP サービスの内部実装を定義します。

Subsystem internal-sftp

この行を削除またはコメントアウトすると、SubsystemSFTP サービスは完全に無効になります。

# Subsystem …

rsync(インストールされている場合)やそのバージョンなどのツールは引き続き実行されるため、SFTP自体を無効にしても、scpユーザーがクライアントとサーバー間でファイルを転送するのを防ぐことはできません。 (以前のバージョンはscpSFTPとは無関係に動作します。最新バージョンはSFTPを使用しますが、このフラグを使用すると以前のプロトコルを強制的に使用できます。-O)考慮すべきいくつかの「マイナーな」回避策もありますssh remoteHost cat somefile > local_copy_of_somefile

答え2

奇妙なことに、ここで許可された回答は質問に対する回答を提供しません。

なぜこのように設計されたのですか?

opensshのSFTPサーバーは従来のデーモン/サーバーではありません。 SFTPを要求するSSH接続が開始されると、インスタンスは要求時に実行されます。

SSHでできることがたくさんあります。このように設計することは、人々がSSHを使用して他のタスクを実行するときにSFTPサーバーにオーバーヘッドが発生しないことを意味します。同様に、ssh はリモート端末セッションを提供するためによく使用されますが、独自のシェルを実装しません。

リソース効率の向上に加えて、システムをモジュール化して開発を簡素化します。

答え3

Debianベースのシステム(Ubuntuを含む)で組み込みサーバーを無効にするには、そのsftp行を削除またはコメントアウトするだけではsshd不十分です。これはコンパイルのデフォルト値があるためです(参考資料を参照)。Subsystemsshd_configSubsystem sftp /usr/lib/openssh/sftp-serverman sshd_config

sshd_config次の行を使用して、以前のUbuntu 16システムでSFTPを正常に無効にしました。

Subsystem sftp /bin/false

systemctl reload ssh; killall sftp-server.

引用符man sshd_config(Ubuntu 16とUbuntu 22の同じテキスト):
「Debian openssh-serverパッケージはsshd(8)のデフォルトオプションではなく、/etc/ssh/sshd_configで複数のオプションを標準に設定します
..)
サブシステムsftp / usr/lib/openssh/sftp-server"

関連情報