作成開始 : 平成19年11月28日(水) 最終更新 : 平成20年01月09日(水)

ProFTPD を使ってみる。


1.はじめに

ProFTPDは、比較的新しいFTPデーモンです。軽くて設定が容易で、Apache的なディレクティブを用いていたり、設定ファイルが単一(/etc/proftpd.confのみ)で管理しやすく、理解しやすい配慮がされています。・・・・とのことです。

2.Vine Linux 4.1 ディフォルトで使ってみる

「デスクトップ」→「システム管理」→「サービスの管理」で確認してみましょう。

 ↑
おやぁー動いてませんね。
ディフォルトではinetd経由でなく単独のデーモンとして動いているようです。
では、このままで接続してみましょう。
おっと、その前に「デスクトップ」→「システム管理」→「セキュリティレベルとファイアウォールの設定」で FTP を許可しときましょう。
WindowsXP のコマンド・プロンプトから接続してみます。

 ↑
接続できませんね。つーことは動いていないってことですね。では、とりあえず動かしてみますか!
GNOME端末から起動してみます。

 ↑
動きましたね。
では、再度 WindowsXP のコマンド・プロンプトから接続してみます。

 ↑
今度はできましたね。でも最初の接続は遅いし dir もできません。これらは後で設定してみます。この時のプロセスは・・・次のような感じです。

 ↑
1つの接続で1つの子プロセスが走るようですね。

3.設定ファイル・・・・/etc/proftpd.conf

以下はディフォルトの /etc/proftpd.conf です。
ディレクティブの解説は ProFTPD Configuration Directives を参照できます。
自分のは次のようにしました。太文字は変更した箇所です。
ServerName "takaq1.plala.jp FTP Server"  # サーバーの名前です。ログインした時に表示されます。
ServerType inetd   # 立ち上げ方法 inetdで動くかデーモン(standalone)で動くかの指定です。
DefaultServer on   # バーチャルホストで一致しない場合はデフォルトで受けるかの指定です。
Port 21  # 制御用ポート番号です。
Umask 022  # 書き込まれた場合のパーミッション、基本パーミッションから022を減算した値になる。
TimesGMT FALSE  # 時計はGMTではないのでFALSE
MaxInstances 30  # 最大接続数 (inetd では無効)
User nobody  # 接続時にデーモンを実行させるユーザ名とグループ名
Group nobody
DefaultRoot       ~  # ユーザーのディレクトリだけをアクセス可能にする
CharsetLocal EUC-JP-MS
<Directory />         # 上書きを許可します。
 AllowOverwrite on
</Directory>
<Anonymous ~ftp>  # Anonymous FTP の設定

 User ftp  # 接続時にデーモンを実行させるユーザ名とグループ名
 Group ftp

 # We want clients to be able to login with "anonymous" as well as "ftp"
 UserAlias anonymous ftp  # Anonymousログインさせるユーザ名をftpに指定し、そのログインをユーザ名ftpのログインとする

 # Limit the maximum number of anonymous logins
 MaxClients 10  # Anonymousログインの最大クライアント数を指定する(制限なしは none)

 # do not require shells listed in /etc/shells (user ftp do not have
 # shell...)
 #ユーザのデフォルト shell が /etc/shells に記載されていなければ、proftpd はログインを拒否します。もし /etc/shells が見つからなければ、全てのデフォルト shell が有効であると仮定される。
 RequireValidShell no

 # We want 'welcome.msg' displayed at login, and '.message' displayed
 # in each newly chdired directory.
 DisplayLogin welcome.msg  # ユーザの最初のログインで表示される ascii のテキストファイル名を設定
 DisplayFirstChdir .message  # 初めて与えられたセッション毎(CWD 経由)のディレクトリに移動したユーザに表示させる ascii テキストのファイル名を設定

 # Limit WRITE everywhere in the anonymous chroot
 <Limit WRITE>  # ファイルやディレクトリの書き込み
 DenyAll      # 全て拒否する
 </Limit>

</Anonymous>
# 接続時にDNSを引かない・・・・接続が早くなります。
UseReverseDNS off
IdentLookups off
ExtendedLog /var/log/proftpd.log  # ログを保存する。
# Rootログインをしない
RootLogin off
# ディレクトリを表示する時の ls コマンドのオプションを指定する。
# .(ドット)で始まるファイル(.htaccessなど)を常に表示するようにするために、"-a"を指定します。
ListOptions "-a"

4.inetd から動くように設定

では、inetd から動くように設定してみましょう。

 ↑
/etc/inetd.conf の ftp に関するリマークを外し proftpd が動くようにします。

 ↑
「デスクトップ」→「システム管理」→「サービスの管理」で起動設定します。
でも、これはOS起動時のサービス自動起動の設定です。
 ↓
平成20年01月09日(水) 追記
上のようにOS起動時のサービス自動起動の設定をするとOSの起動時に下のようなエラーメッセージを表示してしまいます。

Fatal: Socket operation on non-socket
(Running from command line? Use `ServerType standalone' in config file!) [ FAILED ]


どうやら自動起動にできるのは /etc/proftpd.conf の ServerType が standalone でないとだめだよーって言っています。
ですので、上図「サービス設定」にある「FTPサーバ(proftpd)」はチェックを外しておきました。

 ↑
上記でinetd.confを変更したので有効にするために、「アプリケーション」→「アクセサリ」→「GNOME端末」を起動し inetd を再起動します。
そして、接続してみましょう。

 ↑
とりあえず接続できました。

 ↑
プロセスも起動していますね。standalone では、proftpd が常駐することになります。対して、inetd モードでは、アクセスがあったときに proftpd が起動するようになります。 なので、接続が無いと proftpd のプロセスはなくなります。

5.クライアントから dir とか ls できない対応

Windows のコマンドプロンプトやWSFTPで接続した時に dir や ls を入力すると次のメッセージを表示してタイムアウトしてしまいました。
「425 Unable to build data connection: Connection refused」
FFFTPでは「ファイル一覧がダウンロードできませんでした。」になります。
しかし、FFFTPの設定で “PASVモードを使う” “LISTコマンドでファイル一覧を取得” だとできます。
久しぶりにやったので忘れていました。FTP DATA は Activeモードだと「TCP Port 20」でクライアントにリクエストしようとします。
そのため、クライアントのファイヤウオールで 「TCP Port 20」 を受信許可しておかなければなりません。
自分も「ウイルスセキュリティーZERO」でファイヤウオールを有効にしているため、 「TCP Port 20」を受信許可にして無事に dir、ls できました。

戻る

サイトトップへ