menu
Webを活用してお客様のビジネス課題を解決します。札幌・東京を拠点にWebコンサルティングをコアにした、Web制作・システム開発・サーバ構築会社です。

ファイル転送よもやま話 – FTP vs FTPS vs SFTP vs SCP

シェア
ツイート
シェア
ブックマーク
タイトルとURLをコピー

公開日:2026/01/26

はじめに

サーバーにファイルを転送するためには、SCP、FTP、SFTP、FTPSなど、さまざまな方法が提供されています。特にFTP、SFTP、FTPSは名前が似ていますが、これらはすべて異なるデータ転送方式です。

これらのプロトコルは、利用する側はあまり意識しないかもしれませんが、サーバー側で利用できるように設定しようとすると、考慮すべき点が多くあります。この記事では、各プロトコル、その実装、そしてインフラ設定者視点でのサーバー側の設定について説明します。

プロトコルの種類と特徴

各プロトコル(ファイル転送のための取り決め)の特徴を以下に記載します。

1. FTP (File Transfer Protocol)

ファイル転送を行うためのプロトコルです。FTP によってクライアントからサーバーに接続し、コマンドを実行することで内部のファイルリストを取得したり、ファイルの双方向転送を行うことができます。

ただし、このプロトコルの設計段階ではローカルネットワークなど、安全が担保されたネットワーク間での通信が想定されていたため、通信内容は全て暗号化されずに平文で送信されます。これは、通信内容を傍受すれば認証パスワードですら平文のまま取得できることを意味します。

2. FTPS (File Transfer Protocol over SSL/TLS)

FTP の通信が暗号化されていないという問題を解決するため、SSL/TLS 技術を用いて FTP の通信を暗号化したものが FTPS です。

3. SFTP (SSH File Transfer Protocol)

SSH を利用して、ファイルを安全に転送するためのプロトコルです。名称に「FTP」が含まれており、FTP に類似したコマンド(ls、cd、get、put など)を利用できますが、プロトコルとしては FTP とは完全に別物で、通信の基盤技術は SSH です。

4. SCP (Secure CoPy)

SSH の機能を使ってファイル転送を行うプロトコルです。SFTP が FTP と同様にディレクトリ探索などのファイル管理機能を持つのに対し、SCP はファイルコピーのみに特化しています。 

インフラ担当がファイル転送したいと言われると

業務上でサーバーにファイル転送が必要という要望を受けると、インフラ担当者はまず利用状況を確認し、どのプロトコル(ファイル転送方式)を採用するかを検討した上で、そのプロトコルで通信を可能とするための環境を構築します。この時、以下のような点を考慮しています。

現時点では FTP/S はあまり構築したくない

FTP は複雑な仕組みを持つプロトコルです。まず、アクティブモードとパッシブモードという2つのモードが存在します。現在構築する場合、利用者側の NAT 環境などを考慮すると、アクティブモードはほぼ選択肢から外れ、パッシブモードで構成することになります。
パッシブモードで構成する場合、通信を許可するための TCP ポートとして、20/21 番ポートに加えて、データ転送用にある程度の範囲のポート範囲(例:50000-60000)を開放しておく必要があります。 これはパッシブモードでは動的に割り当てられるポートでデータ転送を行うためです。

また、FTPS を利用する場合は、Explicit FTPS(平文で接続後に暗号化へ移行)と Implicit FTPS(接続開始時から暗号化)という2つの仕様が存在し、クライアントの対応状況などからこれらのどちらを利用するかを選定する必要があります。この選定ミスが、ツール間(例: WinSCPでは繋がるのにバッチプログラムからは繋がらない等)の挙動の差を生む一因となる可能性があります。

このように、利用状況を十分に確認した上で FTP サーバーを構築する必要があり、「ただファイルを転送したいだけ」という要件に対して設定が煩雑すぎるというのが実感です。加えて、転送クライアント側の都合で FTPS を要求されることは少なく、平文での通信を行うセキュリティリスクも考慮すると、この記事の著者個人としては FTP サーバーの構築には消極的立場です。

一方、SCP/SFTP であれば SSH と同じポート(通常22番)を利用でき、近年のクラウドサービスや VPS では構築時点で SSH 接続が標準で有効になっています。セキュリティ向上のために接続元のIP制限やポート番号変更などの対策は必要ですが、何よりも転送用ユーザーを作成して SSH でログインできる環境さえ整えれば、すぐにファイル転送が可能になります。

chroot 設定に関しては FTP/S の方が助かる

一方で、ファイル転送時に不要なディレクトリへのアクセスを防ぐため、アクセス可能な領域を限定したいという要件もあります。この場合、chroot というルートディレクトリを仮想的に変更する技術を使い、ファイル転送ユーザーがアクセス可能な範囲を制限します。

この chroot の設定に関しては、FTP サーバー(vsftpd、ProFTPD、Pure-FTPd など)の方が比較的簡単に導入できます。設定ファイルに数行追加するだけで chroot を有効化でき、sshd と比較してホームディレクトリのオーナーやパーミッションの制約が緩やかです。ユーザー自身が所有するディレクトリをそのまま chroot 先として利用できるため、既存のディレクトリ構造を大きく変更する必要がありません。ただし、一部の FTP サーバー(vsftpd 2.3.5 以降など)ではセキュリティ設定により chroot 先の書き込み権限が制限される場合があるため、必要に応じて設定を調整する必要があります。

一方、sshd(SFTP/SCP)での chroot 設定はより厳格な制約があります。chroot 先に指定するディレクトリは root ユーザーが所有している必要があり、さらにグループやその他のユーザーに書き込み権限があってはなりません(パーミッション 755 以下)。この制約は chroot 先ディレクトリだけでなく、そこに至るまでのすべての親ディレクトリにも適用されます。

そのため、実際の運用では chroot 先ディレクトリ(root 所有、書き込み不可)の下に、転送ユーザーが所有する書き込み可能なサブディレクトリを別途作成する必要があります。例えば /home/ftpuser を chroot 先とする場合、このディレクトリ自体は root 所有とし、その下に /home/ftpuser/uploads のような書き込み可能なディレクトリをユーザー所有で作成する構成となります(参考)。

これらの制約に違反していると SSH 接続自体が拒否されてしまうため、設定ミス時のトラブルシューティングにはログファイルの確認が必須となり、相対的に設定難易度が高くなります。

コマンドとプロトコルの違い

Unix 系では ftpsftp、そして scp というコマンドを使うことでファイル転送を行うことができます。しかし、実は scp コマンドの内部実装はデフォルトで SFTP プロトコルを利用するように置き換わっています(OpenSSH 実装の場合)。これは、SCP プロトコルに複数のセキュリティ脆弱性(CVE-2019-6111、CVE-2020-15778 など)が発見され、その対応として SFTP プロトコルを使って従来の SCP と同様のファイル転送を行うようにコマンドの実装が変更されたためです。

この変更は OpenSSH 9.0(2022年4月)で実施されました。従来の SCP プロトコルを使用したい場合は -O オプションを指定する必要があります。

なお、PuTTY など他の主要な SSH 実装も同様に、SCP コマンドでデフォルトで SFTP プロトコルを使用する(または優先する)ようになっており、業界全体のトレンドとなっています。

まとめ

ファイル転送プロトコルには FTP、FTPS、SFTP、SCP など複数の選択肢がありますが、それぞれ異なる特性を持ち、インフラ担当者の視点では先に示した通り、セキュリティ・サーバー構築・設定などの面で一長一短があります。

実務的な推奨としては、セキュリティとファイアウォール設定の容易さから、SFTP/SCP(SSH ベース)の利用が望ましいでしょう。ただし、chroot による厳格なアクセス制限が必要な場合は、設定の複雑さを理解した上で実装する必要があります。「ただファイルを転送したい」という要件であれば、SSH 環境が整っていることが多い現代では、SFTP/SCP の利用が最も現実的な選択肢といえます。