用語辞典・通信プロトコル

FTP

FTPとは

FTPは、サーバーとのファイル転送に使う古いプロトコルで、標準のままでは認証情報や内容を暗号化しません。正式名称はFile Transfer Protocol(ファイル・トランスファー・プロトコル)で、エフティーピーと読みます。

一つの接続で命令とファイルを交互に送るのではなく、ログインや操作を続けるcontrol connection(コントロール・コネクション/制御接続)と、一覧・ファイルを運ぶdata connection(データ・コネクション/データ接続)を分けます。

FTPの接続問題は、待受ポート一つを開けば終わりではありません。制御接続で決めた別のデータ接続が、転送や一覧取得のたびに必要になることが特徴です。

制御接続を保ったまま、一覧・ファイル用のデータ接続を別に開いて閉じるアクティブではサーバーから、パッシブではクライアントからデータ接続を開始する
FTPクライアントとサーバーが命令・応答用の制御接続とファイル用データ接続を分け、アクティブモードではサーバーからの接続がファイアウォールに阻まれ、パッシブモードではクライアントから両方を開く様子、平文通信と転送型違いによるファイル変化を示した図解
図1アクティブモードの代表形ではサーバー側データ接続の送信元にポート20を使いますが、実装・拡張・ネットワーク構成を含めて観測します。

制御接続で命令し、データ接続で一覧やファイルを運ぶ

ログイン後も制御接続は継続し、データ接続は操作ごとに作られる制御成功とデータ転送成功を、別の状態として確認する
Connect制御接続

通常はクライアントからサーバーのTCPポート21へ接続する

Authenticate利用者認証

USER・PASSなどでログインする。通常FTPでは内容が平文で見える

Prepare転送条件

転送型、作業ディレクトリー、アクティブ・パッシブ接続先を決める

Transferデータ接続

LIST、RETR、STORなどに対応して、一覧またはファイルを別接続で運ぶ

Complete完了応答

データ接続終了後、制御接続の最終応答で転送結果を確認する

Continue次の操作

制御接続を保ち、別のデータ接続で次の一覧・転送を行う

図2150などの予備応答は「データ接続を開く」段階、226などは転送完了を示します。最初の肯定応答だけで保存成功と判断しません。

パッシブモードは、クライアントから二本とも接続を開始する

アクティブモードでは、クライアントがPORTまたはEPRTで待受アドレス・ポートを伝え、サーバーからクライアントへデータ接続を開始します。NAT内のクライアントや受信接続を遮断するファイアウォールでは通りにくい構成です。

パッシブモードではPASVまたはEPSVによりサーバー側のデータ待受先を受け取り、クライアントから接続します。サーバーのパッシブポート範囲を限定してファイアウォールへ許可し、NAT越しに通知するアドレスも合わせます。「制御接続へログインできるが一覧で止まる」ときは、データ接続の方向・通知先・許可ポートを分けて確認します。

制御応答は三桁の分類と、複数行の詳細を持つ

FTPサーバーは三桁の応答コードで、予備肯定、完了、追加情報待ち、一時失敗、恒久失敗などを示します。利用者向け文言は実装で異なるため、自動処理はコードと状態遷移を中心に判断します。

ログイン成功後も、権限不足、容量不足、ファイル名、ロック、データ接続失敗などで転送は失敗します。アップロード後は最終応答、実ファイルのサイズ、必要ならハッシュやアプリ側の検証を確認します。

ASCII転送型は改行などを変換し、Image型はバイトをそのまま運ぶ

ASCII type(アスキー・タイプ)はテキスト表現の差を吸収するため、行末などを変換します。Image type(イメージ・タイプ)は一般にバイナリー(バイナリー)と呼ばれ、ファイルのバイト列をそのまま転送します。

画像、圧縮ファイル、実行ファイルをASCII型で送ると、特定のバイト列が改行として変換され壊れる可能性があります。自動判定へ任せる場合もログを確認し、バイト同一性が必要なファイルはImage型を明示します。

一覧形式や文字コードは、古い基本仕様だけでは統一しきれない

古いLIST応答は人が読む表示に近く、日付・権限・所有者の形式がサーバーで異なります。RFC 3659のMLSD・MLSTは、機械処理しやすい事実名と値を定めます。対応する場合はFEAT応答を確かめて使います。

UTF-8ファイル名への対応もクライアントとサーバーで差があります。ローカル文字コードを誤認すると表示化けだけでなく、別名ファイルの作成や削除対象の誤りにつながります。サーバー設定、UTF8機能、正規化をテストします。

通常FTPは、利用者名・パスワード・ファイルを暗号化しない

制御接続のUSER・PASS、ファイル名、操作、データ接続の内容は通常平文です。同じネットワークや途中経路で盗聴・改ざんされる可能性があり、匿名FTPでも配布ファイルの真正性は自動で保証されません。

インターネット越しの新規設計では、通常FTPを認証情報付きで使わず、要件に応じてFTPS、SFTP、HTTPSなどを選ぶべきです。似た名前でも接続方式・ポート・鍵・ファイアウォール要件は異なります。

仕様の確認資料:RFC 959 / STD 9「File Transfer Protocol」RFC 3659「Extensions to FTP」RFC 2577「FTP Security Considerations」

関連用語