Webサーバがなんとか動くようになったので、今度は指定のディレクトリにファイルを送り込むめにFTPサーバを構築します。
セキュリティ的に考えると自宅内のLAN経由ででも放り込んだほうが良いのでしょうが、なんせ実家にサーバを置いているためそれもかなわず・・・
ということで早速インストールと設定を行います。
sudo apt-get update
sudo apt-get install proftpd
にてインストールします。
もっとも、自分の場合は既にインストールされてましたが。
設定ファイルのパスは
/etc/proftpd/proftpd.conf
となります。
この設定ファイル、Apacheのそれと似たような概念でできているようで「ディレクティブ」という値を設定していくことで機能を決めていきます。
ではファイルを開いてみましょう。
sudo cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.back
とでも入力してデフォルトの設定ファイルをバックアップ(壊れてもいいように^^;)
vi /etc/proftpd/proftpd.conf
するとなにやらずらずらと書き込まれていますので該当する箇所を修正していきます。
ServerName "FTP Server"
クライアントから接続した時に表示されます。"から"の間はお好きな名前をどうぞ。
ドメイン名などでもよいでしょう。
ServerType standalone
デーモンの起動状態を設定しています。
standaloneはデーモンとしてシステムに常駐するのに対し、
inetdは外部からリクエストを受けた時にinetd経由で起動する形になります。
何が違うか大雑把に言うと、standaloneは常時起動しているため動作は早いがその分常にメモリを消費する、inetdは不必要な時は起動していないため動作が若干鈍くなるが普段のメモリ消費はなし、というかんじでしょうか。
自分は決して使用頻度が高いわけではないと思いますがひとまずメモリの状態まで気にしていないのでstandaloneにしました。
DefaultServer on
単一のサーバでは(というか自宅サーバならほぼそうなのでは??)あまり気にしなくてもよさそうなのですが、接続先のIPやバーチャルホストが不明なリクエストがあった際の受け皿として現行のサーバを使用する、というところでしょうか?
ListOptions "-a"
クライアントから接続した時、一覧に隠しファイルも表示させるようにします。
不要ならかまわなくても(追記しなくても)よいと思います。
ServerIdent on "FTP OK"
クライアントから接続した際のバナーメッセージを設定します。
ほっとくと「ProFTPD」を使用していることとそのバージョンが表示されてしまい、セキュリティ的に好ましくないようです。
UseReverseDNS off
IdentLookups off
特に後者をoffにすることで接続に要する時間が随分短縮されるそうです。
共に接続時のDNS逆引き情報を使用するかしないかということに関わるようですが、結構時間が短縮されるそうです。
DefaultRoot ~/pubilc_html
自分のホームディレクトリになるpublic_htmlより上の階層を見ることができないようにしています。
ちなみに半角スペースを空けて「!ユーザ名」と追記すると、記入したユーザのみ上の階層も覗くことができます。ただし、使用しているユーザの権限が及ぶ範疇での話ですが。
Port 21
FTPサーバが動作するポート番号。デフォルトで21になっているはずなので確認だけ。
MaxInstance 5
スタンドアロンで稼動している時の子プロセスの最大数を設定します。
inetdの場合は関係ないようです。
MaxLoginAtempts 3
パスワードの入力ミスを許容する回数です。
一発で弾きたければ1にすることで可能となります。
MaxClientsPerUser 1
同一ホストからの同時接続可能な数を指定します。
通常、1台のクライアントから同時に複数接続することは無いと思いますので1ホストにつき1接続のみとしています。
MaxHostsPerUser 1
複数ホストから同一ユーザでの接続可能な数を指定します。
同じユーザが異なるホストから複数接続することもあまり無いような気がしますのでこれも1にしています。
DeleteAbortedStores on
アップロードを中断した場合(故意、不意問わず)に処理途中になったファイルの処理です。
「on」にすると中断した場合削除することになります。
<Anonymous ~ftp> ~ </Anonymous>をコメントアウト
定められたユーザではなく誰でも「Anonymous」として使用できるAnonymousFTPとしての設定だそうです。
誰にでも使わせる予定はないので全てコメントアウト(各行頭に#を追記)して無効にします。
ひとまずはこのぐらいでよいのではないでしょうか。
設定が終わったら「:wq」で上書き保存した後
sudo /etc/init.d/proftpd restart
と入力して再起動します。
無事起動したらファイルのアップロード・ダウンロードを行ってみましょう。
NGの場合は設定ファイルを見直してみましょう。
ちなみにFTPには「アクティブモード」「パッシブモード」の2種類があります。
FTPというのはコマンド送信用とデータ送受信用の2つの接続を同時に確立するのですが、
アクティブはクライアント側のユーザが指定するポート(通常20)に対してサーバ側から接続を張る方式です。
対するパッシブはクライアントが接続しにいくとサーバ側から待ち受けポートを指定(サーバの設定次第で任意のポート)、そこへクライアントから接続を張る方式です。
今回の設定ではアクティブでしか動かないので、クライアントソフトの接続設定で「パッシブを使用」とか「PASVモード」にチェックが入っていると接続に失敗してしまいます。
うまく繋がらないときはこのあたりもチェックしてみましょう。