FTP, FTPS, SFTP

更新日:2005.05.07

 FTP(File Transfer Protocol)はホスト間でファイル転送を行うときに使われるプロトコルである。HTTPより古くから使われているが、パスワードやデータなど通信内容が平文で流れるため(要するに暗号化されずに垂れ流し状態)、悪意のある者がパケットキャプチャをすると転送内容を盗み見されてしまうという深刻な問題がある。

 ここでは暗号化してセキュアなファイル転送を行う方法を解説する。

  1. FTP
     暗号化されない一般的な FTPは以下のような構成である。
    ┏━━━━━┓                            ┏━━━━━━┓
    ┃FTPサーバ ┣───インターネット────┫FTP         ┃
    ┃          ┃                            ┃クライアント┃
    ┗━━━━━┛                            ┗━━━━━━┛
    ・Tiny FTP Daemon                         ・FFFTP
    ・War FTP Daemon
    
     プロバイダのサーバやレンタルサーバ上に自分のホームページを持っていると、ファイルをアップロードするときに必ず FTPすることになるが、このような場合に FTPの安全性を心配してもプロバイダが対応しないことにはどうしようもない。ところが、自宅で FTPサーバを立て、出先からアクセスするような場合にはセキュリティには十分に気を配った方がいい。

     そこで登場するのが転送データを暗号化してセキュアに FTPする二つの方法、FTPS と SFTP である。


  2. FTPS
     FTPS は FTP over SSL/TLSを意味する。
     SSL は Secure Sockets Layerの略である。Netscape 社が開発したサーバ/クライアント認証と暗号化通信を行うためのプロトコルであり、IEでも採用されている。後に SSLを元に TLS (Transport Layer Security)が IETFによって標準化された。
     FTPSを実行するには、サーバ/クライアントともに以下に示したような SSL/TLSに対応したソフトが必要である。上記の Tiny FTP Daemon, War FTP Daemon や FFFTPでは FTPSはできない。逆に SSL/TLSに対応したサーバ/クライアントは通常の FTPも可能である。
     FTPS の規定のポートは FTPと同じ 21番である。
     転送モードは PORTモードがだめなら PASVモードを試すとよい。

    ┏━━━━━┓                            ┏━━━━━━┓
    ┃SSL対応   ┣───インターネット────┫SSL対応FTP  ┃
    ┃FTPサーバ ┃                            ┃クライアント┃
    ┗━━━━━┛                            ┗━━━━━━┛
    ・MoreFTPd                                ・FileZilla
    ・NekosogiFtpd                            ・SmartFTP
    ・RaidenFTPD                              ・NextFTP
    ・FileZilla Server                        ・FlashFXP
                                              ・CuteFTP Pro
                                              ・FTP Voyager
    
     FTPSには Explicit と Implicitの二つのモードがある。違いは以下の通りである。全てのサーバ/クライアントが両方のモードをサポートしているとは限らないので注意すること。

     Explicit:サーバの USERコマンドに対してクライアントがユーザ名の代わりにAUTH SSL/AUTH TLSを発行し、サーバからの応答受信後クライアントからSSL/TLSハンドシェイクを開始し、SSL/TLSセッション確立後にログインを開始する方式。すなわち、非暗号化状態で接続を開始し、ユーザ名とパスワードを検証する直前にセキュアなデータ接続を行う。

     Implicit:いきなりクライアントからSSL/TLSハンドシェイクを開始し、SSL/TLS セッション確立後にログインを開始する方式。すなわち、クライアントはサーバへのすべての要求をセキュア状態で送信する。

     MoreFTPd <-> FileZilla の組み合わせでは以下のような結果であった。
      ○ FTP
      × FTP over SSL/TLS(implicit encryption)
      ○ FTP over SSL(explicit encryption)
      ○ FTP over TLS(explicit encryption)

     explicit encryptionでは証明書を許可するかどうかの問い合わせがあるので許可をする。証明書はDeleGateを使って AN HTTPDで SSL通信するに書いた方法で certificate.pem, privatekey.pem の二つののファイルを作成するとよい。


  3. SFTP
     SFTP は SSH File Transfer Protocol であり、パスワードやデータは SSH(Secure SHell)による暗号化されるのでセキュアなファイル転送が可能である。上記の FTPSとは暗号化方式が異なり、全く別物である。
     SFTPの規定のポートは 22番である。ルータ、ファイアウォールも ポート22の開放を。
    ┏━━━━━┓                            ┏━━━━━━┓
    ┃SFTPサーバ┣───インターネット────┫SFTP        ┃
    ┃          ┃                            ┃クライアント┃
    ┗━━━━━┛                            ┗━━━━━━┛
    ・OpenSSH for Windows                     ・FileZilla
                                              ・WinSCP
                                              ・EmFTP
    
    以下では、SFTPサーバとして OpenSSH For Windowsのインストール方法を説明する。

    下記URLから Binary Installer Releasesをダウンロードする。
     http://sshwindows.sourceforge.net/download/

    2005/05現在の最新版は setupssh381-20040709.zip である。

    解凍して、setupssh.exeを実行するとインストールが開始する。
    サーバPCにはサーバシステムを、クライアントPCにはクライアントシステムをインストールする。

    コマンドプロンプトから以下のコマンドを実行する。
    mkgroup -l >> ..\etc\group
    mkpasswd -l -u userXXX >> ..\etc\passwd

    /home ディレクトリを設定する(sftp接続だけなら /homeの設定は不要かもしれないが、sshでアクセスするときは必須)。
    HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/home

    例えば F:\Users を /home にするなら、nativeキーの値のデータを F:\Users に設定する。
    この結果、userXXX というユーザの /home は F:\Users\userXXX になるのでフォルダの作成が必要。

    ファイアウォールが動作しているなら、ポート22番を開放する。

    新しいディレクトリを登録は、例えば C:\abc を /xyz として登録するなら、
    HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2
    にキー /xyz を新規作成し、以下の DWORDと 文字列を設定する。
     flags REG_DWORD 0x0000000a(10)
     native REG_SZ C:\abc

    クライアントPCでコマンドプロンプトからアクセスするときは、
     sftp userXXX@サーバアドレス
    のようにコマンドを実行すれば、通常の FTPと同様のコマンドを実行することができる。また、この上で説明した FileZilla を使ってアクセスすれば GUIインタフェースでファイルの閲覧などが可能である。


  4. 日本語ファイル名の扱い
     SFTPの場合、日本語ファイル名のファイルのアップロード/ダウンロードに失敗する。クライアント側の問題ではなく、OpenSSH for Windowsに問題があるようだ。検索してみると以下がみつかった。
     http://kotaro.aist-nara.ac.jp/~hirots-m/diary/?200406
    cygwin.dll となっているが cygwin1.dll のことではないかと見当をつけて交換してみると解決した。配布された OpenSSH for Windows の cygwin1.dllのバージョンは 1.5.10-cr-0x5e6(更新日時 2004年05月26日 11:07:50) であるが、これを最新版の 1.5.16(更新日時 2005年04月26日 09:26:58)と取り替えると(C:\Program Files\OpenSSH\bin)アップロード/ダウンロードが可能になった。cygwin1.dllの最新版は以下からダウンロードしたファイルを解凍すれば得られる。
     ftp://ftp.jaist.ac.jp/pub/cygwin/release/cygwin/
     FTPSではもともと日本語ファイル名の問題は存在しない。


  5. 関連情報へのリンク
     ftps - FTP-SSL and FTP-TLS - the state of play
     OpenSSH Windowsにおける選択肢
     OpenSSH for Windows
     FileZilla Homepage
     MoreFTPd
     FTP サーバ 設定(SPENCER Network)
     FTPをファイアウォール・フレンドリ・モードに変更する方法


作成:いと,mailto:gfh05223@nifty.com