File Transfer Protocol























File Transfer Protocol(ファイル・トランスファー・プロトコル、FTPファイル転送プロトコル)は、ネットワークでファイルの転送を行うための通信プロトコルの1つである。




目次






  • 1 概説


  • 2 セキュリティ上の問題


  • 3 関連RFC


  • 4 同様の目的に使えるプロトコル


  • 5 関連項目





概説


インターネット初期の頃から存在するプロトコルで、今でもインターネットでよく使用される通信プロトコルの1つである。
プロトコル上は任意のホスト間のファイル転送を行うことが可能であるが、通常は接続したクライアントとサーバ(FTPサーバ)間の転送に利用される。


用途としては



  • ウェブページ用各種データファイル(HTMLソース、画像など)のクライアントのパソコンからウェブサーバへのアップロード

  • パソコンソフト配布サイトや、データが入っているFTPファイルサーバからクライアントへのファイルのダウンロード


などに使われる。
ダウンロードについては、アップロードについてはFTPクライアントソフトやCUIコマンドが必要となる。


多くのブラウザソフトにはダウンロードに特化したFTPクライアントソフトの機能が実装されている。


任意のホスト間の転送を指示できる名残として、サーバへの接続時のコマンド用とは別にデータ転送用のコネクションを確立するが、この確立方法に「アクティブモード」、「パッシブモード」という2種類の方式がある。


アクティブモード(ポートモードとも言う)では、クライアントがサーバへ待ち受けIPアドレスとポート番号を通知し、サーバがクライアントから通知されたIPアドレスのポート番号へコネクションを確立しに行く。
このとき利用するポート番号が毎回異なるので、ファイアウォール、NAT(IPマスカレード)などを使った環境では場合によってはうまく接続できないこともある。
この場合はパッシブモードを用いる。


パッシブモードではサーバがクライアントへ待ち受けポート番号を通知し、待ち受けポート番号の通知を受けたクライアントがサーバにコネクションを確立しに行く。


いずれのモードでも、コマンド用とデータ用で別々のコネクションを張ることには変わりはない。
サーバ側にファイアウォールがある場合、データコネクションのためにどのポート番号を使うかを設定してファイアウォールとの整合を確認する必要がある。パッシブモードを使っている限りにおいては、クライアント側のファイアウォールは気にする必要がない。


通常、サーバに接続する際には認証を必要とするが、専らファイル(主に無償のフリーソフトなど)を配布する目的で、匿名でアクセスできる Anonymous(匿名) FTP サーバを用いる場合もある。


ただし、匿名アクセスでも形式上認証が必要であり、この場合、ユーザとして"anonymous"または"ftp"を指定する。パスワードは通常何でもよいが、配布したソフトに瑕疵があった場合などにサーバ管理者が連絡をとることができるよう、ユーザの電子メールアドレスを指定するのがマナー(ネチケット)とされてきた(メールアドレスのドメインがクライアントのIPアドレスの逆引きなどから明らかな場合は、"foo@"のようにドメインを省略することも多い)。
サーバによっては、パスワードがメールアドレスの形式を満たさないと利用できないこともある。
しかし、近年ではスパム(迷惑メール)などの問題により、むやみにメールアドレスを公開しない風潮が高まっていることから、このマナーは廃れつつある。
また、現在ではFTPクライアント機能を備えたウェブブラウザで匿名FTPサーバにアクセスすることも多く、この場合パスワードは特に指定しない限りブラウザのデフォルト設定(Internet Explorerであれば"IEuser@"など)が使われ、メールアドレスとして意味のあるものにはならない。



セキュリティ上の問題


FTPは、インターネット初期から存在する古いプロトコルであり、セキュア(安全)なプロトコルとして設計されていない。ユーザ名やパスワードなどの認証情報を含むすべての通信内容を暗号化せずに転送するなどの問題の他、数多くのセキュリティ脆弱性が指摘されている。RFC 2577は、以下の脆弱性を列挙している:



  • 総当たり攻撃

  • en:FTP bounce attack

  • パケットキャプチャ (sniffing)

  • Port stealing

  • en:Spoofing attack

  • ユーザ名保護


FTPは通信内容を暗号化できない。通信経路上でパケットをキャプチャすることで、ユーザ名・パスワード・コマンド・データといった情報を容易に盗聴できる。この問題は、SMTPやIMAPといった他の歴史のあるインターネットプロトコルでも同様である。これらのプロトコルをセキュアにする一般的な方法は、SSL/TLSセッション上で通信を行うことである。FTPでこれを行うのがFTPSである。またSSHを介してファイル転送を行うSFTP、SCPといったツールもある。


FTPは、Gumblarなどのコンピュータウイルスの標的にもされた。そのため、現在では、FTPではなく前述の FTPS (SSL/TLSを使ったFTP) や SFTP (SSH File Transfer Protocol)、SCP、SSH上でのrsync、など暗号化された手法を用いることが強く推奨される。



関連RFC




  • RFC 4217 - Securing FTP with TLS


  • RFC 3659 - Extensions to FTP


  • RFC 2640 - Internationalization of the File Transfer Protocol


  • RFC 2577 - FTP Security Considerations


  • RFC 2428 - FTP Extensions for IPv6 and NATs


  • RFC 2389 - Feature negotiation mechanism for the File Transfer Protocol


  • RFC 2228 - FTP Security Extensions


  • RFC 1635 - How to Use Anonymous FTP


  • RFC 1579 - Firewall-Friendly FTP


  • RFC 1127 - A Perspective on the Host Requirements RFCs


  • RFC 1123 - Requirements for Internet Hosts -- Application and Support 4.1章


  • RFC 959 - FILE TRANSFER PROTOCOL (FTP)


  • RFC 765 - FILE TRANSFER PROTOCOL (RFC 959 で改訂)


  • RFC 114 - A FILE TRANSFER PROTOCOL



同様の目的に使えるプロトコル




  • Trivial File Transfer Protocol(TFTP)- FTPと比べて認証などを必要としない分だけ軽量


  • HTTP/WebDAV

  • SCP

  • SSH File Transfer Protocol

  • Rcp

  • rsync

  • NFS


  • SMB/CIFS (Samba)


  • FTPS (FTP over SSL/TLS)



関連項目



  • FTPコマンドの一覧

  • FTPサーバリターンコードの一覧

  • Archie

  • FTPサーバ

  • FTPクライアント

  • TCP Wrapper

  • File eXchange Protocol






Popular posts from this blog

MongoDB - Not Authorized To Execute Command

How to fix TextFormField cause rebuild widget in Flutter

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith