SFTPとSCP:安全なファイル転送
SFTPとSCPを安全でないFTPと比較し、それらが提供する暗号技術上の保護を理解します。
「SFTPとSCP:安全なファイル転送」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
SFTPはFTPではなくSSHのサブシステム
名前に反して、SFTP(SSH File Transfer Protocol)はFTPとは関係ありません。SFTPはSSH-2サブシステムとして実行されるように設計されたバイナリプロトコルです。つまり、既存の認証済み暗号化SSH接続上で動作します。SSHクライアントは、ssh user@host -s sftpコマンドを使用してサーバー上のSFTPサブシステムを呼び出します。SFTPのすべての操作は、基盤となるSSHトランスポートのセキュリティ保証を引き継ぎます。
SFTPの機能
SFTPは、暗号化されたチャネル上で豊富なファイル操作を提供します。ディレクトリ内容の一覧表示、ファイルのアップロードとダウンロード、ファイルの削除と名前変更、ディレクトリの作成と削除、ファイルのアクセス許可とタイムスタンプの読み取りと設定、中断した転送の再開などが可能です。これらの機能により、SFTPは単なるファイル転送ツールではなく、完全なリモートファイルシステムインターフェースとなっています。
SCP:SSHによる簡単なファイルコピー
SCP(Secure Copy Protocol)は、SSH経由でファイルを転送するための、古くてより単純なプロトコルです。scp file.txt user@host:/pathコマンドを実行すると、ファイルを安全にコピーできます。SCPは一度限りの転送ではSFTPより簡単に使用できますが、対応する操作は一部に限られます。ローカルからリモート、リモートからローカル、またはリモートからリモートへのコピーが可能です。対話モードはなく、中断した転送の再開にもほとんど対応していません。
SCPプロトコルの脆弱性
元のSCPプロトコルには重大な脆弱性がありました。悪意のあるサーバーは、クライアントが要求した内容に関係なく、任意のファイルをクライアントに送信できました。サーバーを制御する攻撃者は、意図した保存先ディレクトリの外にあるファイルを上書きできました。OpenSSH 9.0(2022年)では、従来のSCPプロトコルが非推奨となり、SFTPベースのscpが採用されました。現代のscpコマンドは内部でSFTPを使用するため、この種の攻撃を排除しながら、使い慣れたコマンド構文を維持しています。
FTPとFTPSとSFTPの違い
安全なファイル転送の選択肢として、よく混同されるものが3つあります。FTP(ポート21)は暗号化されていないため、使用すべきではありません。FTPS(SSL上のFTP)は、ポート990(暗黙モード)またはポート21(AUTH TLSを使用する明示モード)でFTPにTLSを追加します。そのため、FTPインフラストラクチャに加えて証明書管理が必要です。SFTPはSSH(ポート22)上で動作するまったく別のプロトコルで、既存のSSH認証と鍵管理を再利用します。一般に、SFTPはFTPSより設定と保守が簡単です。
SSH経由のrsyncによる効率的な同期
rsync は、ファイルの変更された部分だけを転送するファイル同期ツールであり、増分バックアップでは SCP よりはるかに効率的です。rsync を -e ssh フラグ付きで実行すると、すべてのデータが SSH トンネルを通過します。rsync -avz -e ssh user@host:/remote/ /local/ コマンドを実行すると、リモートディレクトリとローカルディレクトリが同期され、差分だけが転送されます。SSH 経由の rsync は、サーバーのバックアップやデプロイワークフローで標準的に使用される方法です。
大容量ファイルの転送
SFTP は転送を再開できます。大容量ファイルのアップロード中に接続が切断された場合、最初からやり直すのではなく、最後に確認されたバイト位置から転送を再開できます。OpenSSH の sftp クライアントは、アップロードを再開する reput コマンドと、ダウンロードを再開する reget コマンドをサポートしています。非常に大きなファイル(数 GB のファイル)の転送には、lftp のように自動再試行や帯域幅制限を備えた、より堅牢な転送管理ツールが適しています。
SFTP の Chroot Jail によるアクセス制限
OpenSSH サーバーでは、chroot jail を使用して SFTP ユーザーを特定のディレクトリツリーに制限できます。SSH の設定に Match User ディレクティブと ChrootDirectory、および ForceCommand internal-sftp を追加すると、隔離された SFTP 環境が作成されます。ユーザーは指定されたディレクトリ内でファイルをアップロードおよびダウンロードできますが、ファイルシステムの残りの部分にアクセスしたり、シェルコマンドを実行したりすることはできません。これは、Web ホスティングのファイル管理やクライアント向けアップロードポータルで広く使用されています。
SFTP サーバーの設定
OpenSSH サーバーで SFTP を有効にするには、sshd_config に Subsystem sftp /usr/lib/openssh/sftp-server を追加します。sftp-server バイナリが、SFTP プロトコルのすべての操作を処理します。chroot の設定では、ChrootDirectory の所有者を root にし、他のユーザーが書き込めないようにする必要があります。これは設定エラーのよくある原因です。サービスを再読み込みする前に sshd -t で設定をテストすると、構文を確認できます。
自動バックアップワークフローでの SFTP
SFTP は自動バックアップパイプラインと相性がよく、簡単に統合できます。バックアップサーバーでは公開鍵認証を使用してパスワードなしで接続するため、cron でスケジュールした転送を人手なしで実行できます。バックアップユーザーを chroot によってアップロードディレクトリに制限すると、バックアップサーバーが侵害された場合の被害を抑えられます。SFTP の接続失敗や転送エラーをログ監視することで、復旧能力に影響が及ぶ前にバックアップの問題を早期に検知できます。
SFTPクライアントツール
コマンドラインのsftpクライアント以外にも、FileZilla、Cyberduck、WinSCPなどのグラフィカルツールが、ドラッグアンドドロップ操作、ブックマーク管理、左右に並べたディレクトリ表示によるSFTPをサポートしています。これらのツールは、GUIベースのワークフローを好む開発者や管理者に広く利用されています。いずれも同じ基盤となるSFTPプロトコルとSSH認証を使用しており、SSH鍵ファイルやシステムのSSHエージェントもサポートしています。
SFTPとSCPの比較
OpenSSHが従来のSCPプロトコルをSFTPベースの実装に置き換えるきっかけとなった、主なセキュリティ脆弱性は何でしょうか。
SFTPとSCP:重要なポイント
SFTPはFTPとは関係なく、SSHのサブシステムです。暗号化されたSSH経由で、リモートファイルシステムに対する完全な操作を提供します。SCPはよりシンプルですが、従来のプロトコルにはサーバー側のパストラバーサル脆弱性があり、OpenSSH 9.0では内部でSFTPに切り替えることで修正されました。FTPSはFTPにTLSを追加するのに対し、SFTPは完全にSSHベースです。SSH経由のrsyncは、効率的な差分同期を提供します。chroot jailは、SFTPユーザーを指定したディレクトリに制限します。
よくある質問
「SFTPとSCP:安全なファイル転送」レッスンは無料ですか?
はい。「SFTPとSCP:安全なファイル転送」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「SFTPとSCP:安全なファイル転送」で何を学びますか?
SFTPとSCPを安全でないFTPと比較し、それらが提供する暗号技術上の保護を理解します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「SFTPとSCP:安全なファイル転送」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 安全なプロトコルを構成するもの
- SSH:リモートアクセスを保護する
- SFTPとSCP:安全なファイル転送
- DNSSEC:DNS応答を認証する