ProFTPD

2008/10/19

Ubuntuサーバー版でFTPS環境を構築する

Ubnutuサーバー版をインストールし、WebDAV環境を作ったので、次はFTPS環境を作ります。

FTPSの使えるFTPサーバを調べた所、ProFTPDが使えるそうです。パソコンおやじに設定方法が載っていました。
ProFTPDは以前VineLinuxでFTPサーバを作ってみたことがあったので、楽勝だね!(と思ったときはいつも何かが起こる・・・。)
OSは、Ubuntu8.04.1 Server です。

ちなみにネットで検索すると、SFTPとFTPSを混同している間違いがけっこう目に付きます。
っていうか、SSHとSSLを混同しているっていうか・・・。
そういう私もLinuxを覚えたてのころは、どっちがどっちか区別ついていませんでした。
名前もやることも似ているけど、全然違うものです。
SFTPはSecure File Transfer Protocolの略でSSHを利用したプロトコルで、FTPSはFile Transfer Protocol over SSL/TLSの略でFTPのデータをSSLで暗号化する通信のことです。

ちなみにSFTPはSSHをインストールすると使えるので、Ubuntuサーバー版インストール時にSSHをインストールしていれば使えるようになっています。
クライアントも、WinSCPとかFilezilaとか使いやすいものがあります。
ただ、SSHの拡張なので見えて欲しくないファイルやディレクトリが見えるため、管理者以外のユーザーが使うには問題があるかなあと思いました。


さて、インストールしようと思ってパソコンおやじさんのセキュアFTPサーバの構築(ProFTPD+SSL/TLS:CentOS編)を見たところ、なんかSSL/TLS対応用RPMを作成してるんですけど・・・。
ProFTPDでSSL対応させる為には mod_tls を組み込んでコンパイルしなくてはいけないそうな。
が~ん!そういうことだったのか!
実運用させた場合、ディストリビューションのアップデートが使えないからその度に自分でコンパイルしてアップデートして・・ってな運用になります。
そんなのいやだ~。
ネットで調べても、Ubuntuサーバー版を使っている人は mod_tls を組み込んで~みたいな話をしています。
パッケージ版では無理なのか~。がっかり。

そう思っていたところ、こんなページも見つけました。
ふしぎなぼうしFTPS+LDAPなサーバ構築
ここでは Debian/lenny を使って ProFTPDのFTPS環境を作っていらっしゃいますが、mod_tls な記述はどこにも見当たりません。
もしかしたら最新版はSSL対応しているのかもしれない!と勝手に想像し、パッケージをインストールすることにしました。


ProFTPDのインストール
$ sudo apt-get install proftpd proftpd-doc
inetdで動かすか聞かれますが、常時稼動させたいのでスタンドアロンを選択しました。

インストール後試しに proftpd -l をしてみましたが、やっぱり mod_tls は見えません。本当に大丈夫なのか!?
いちおう設定ファイルにはtls関連のものが見えるんだけど。
・・・先に進みます。


proftpd.conf の修正 いちおう設定ファイルのバックアップも取っておきます。
$ cd /etc/proftpd/
$ sudo cp proftpd.conf proftpd.conf.BACK
$ sudo vim proftpd.conf

#UseIPv6                                on
UseIPv6                                off ←offに修正

# DefaultRoot                   ~
DefaultRoot                   ~ ←コメントをはずす


#Include /etc/proftpd/tls.conf
Include /etc/proftpd/tls.conf ←コメントをはずす


tls.conf の修正
$ sudo cp tls.conf tls.conf.BACK
$ sudo vim tls.conf

以下のコメントをはずし、修正する。
<IfModule mod_tls.c>
TLSEngine                   on

TLSLog                      /var/log/proftpd/tls.log

TLSProtocol                 SSLv23

TLSRSACertificateFile       /etc/ssl/Server/cert.pem ←サーバ証明書の位置です。
TLSRSACertificateKeyFile    /etc/ssl/Server/private.pem ←サーバ秘密鍵の位置です。

TLSRequired                 on ←TLSを強制する。(通常のFTP接続を不可にする)
</IfModule>


再起動する
$ sudo /etc/init.d/proftpd restart


この後、FileZillaのサイトマネージャのサーバの種類に、「FTPES - 明示的なTLS/SSL上のFTP」を選択して接続した所、ばっちりつなげました。
(ProFTPDはExplicitのみでImplicitには非対応です。そういうポリシーみたいです。)
FTPで接続した場合は、接続に失敗します。
なんだ、デフォルトで TLS/SSL に対応してるじゃん!

ただFileZillaがクライアント認証に対応してなくて、他にフリーで使えるFTPSクライアントが無いのが残念。
IPによる接続制限とパスワード認証でごまかすかなあ。


2008年11月3日 追記
上記で使ったFileZillaは、FileZillaPortable3.0.11だったのですが、このときは問題なく繋げていましたが3.1以降は繋げなくなりました。
というのも、FileZillaの作者がFTPSの仕様に厳密になるように仕様を変更したのですが、ProFTPDがその仕様を満たしていないのが原因のようです。
多くのFTPSサーバが仕様を満たしていなかったために問題が続発し、FileZillaの作者とユーザーとでかなり激しい議論があったそうですが、現状はFTPサーバ側が対応していく流れになっているようで、ProFTPDもまもなく修正したものが実装されるそうです。


あと、FTP専用ユーザーの作り方も載せておきます。
スタックアスタリスクのこの辺の記事を参考にしました。
/etc/shells に/bin/falseを追記する
$ sudo vim /etc/shells
/bin/false ← 最下部に追記

$ sudo useradd -d ホームディレクトリ -s /bin/false -p パスワード ユーザー名

| | コメント (0) | トラックバック (0)