質問
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
削除するように変更して、サーバーでこの機能を無効にできます。Subsystem
sftp-server
たとえば、次の行はsftp-server
SFTPサービスを処理するための外部ユーティリティを定義します。
Subsystem sftp-server
この行は、SFTP サービスの内部実装を定義します。
Subsystem internal-sftp
この行を削除またはコメントアウトすると、Subsystem
SFTP サービスは完全に無効になります。
# Subsystem …
rsync
(インストールされている場合)やそのバージョンなどのツールは引き続き実行されるため、SFTP自体を無効にしても、scp
ユーザーがクライアントとサーバー間でファイルを転送するのを防ぐことはできません。 (以前のバージョンはscp
SFTPとは無関係に動作します。最新バージョンはSFTPを使用しますが、このフラグを使用すると以前のプロトコルを強制的に使用できます。-O
)考慮すべきいくつかの「マイナーな」回避策もありますssh remoteHost cat somefile > local_copy_of_somefile
。
答え2
奇妙なことに、ここで許可された回答は質問に対する回答を提供しません。
なぜこのように設計されたのですか?
opensshのSFTPサーバーは従来のデーモン/サーバーではありません。 SFTPを要求するSSH接続が開始されると、インスタンスは要求時に実行されます。
SSHでできることがたくさんあります。このように設計することは、人々がSSHを使用して他のタスクを実行するときにSFTPサーバーにオーバーヘッドが発生しないことを意味します。同様に、ssh はリモート端末セッションを提供するためによく使用されますが、独自のシェルを実装しません。
リソース効率の向上に加えて、システムをモジュール化して開発を簡素化します。
答え3
Debianベースのシステム(Ubuntuを含む)で組み込みサーバーを無効にするには、そのsftp
行を削除またはコメントアウトするだけではsshd
不十分です。これはコンパイルのデフォルト値があるためです(参考資料を参照)。Subsystem
sshd_config
Subsystem sftp /usr/lib/openssh/sftp-server
man 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"