ProFTPDのインストール・設定

Red Hat Linuxのページトップへ

ProFTPDの公式ページ[The ProFTPD Project]
ProFTPDのダウンロードページ

ProFTPDとはフリーのFTPサーバソフトです
セキュリティーに強く、細かい設定ができるのが特徴
MySQL を利用する

ダウンロード 現在は1.2.10rc3が最新版です[2004年7月13日リリース] ProFTPDのダウンロードページにて proftpd-1.2.10rc3.tar.gz を入手する FFFTPを使用する場合、1.2.10ではファイルの一覧が見れない不具合が出る そのときはproftpd-1.2.9rc3.tar.gzまたはProFTPD NLSTパッチ # tar zxf proftpd-1.2.10.tar.gz # patch -p0 < proftpd-1.2.10-nlst-ffftp.patch # cd proftpd-1.2.10 # ./configure ・・・・ NISユーザーを使用する場合はRPM版でないとできない
インストール ダウンロードしたソースを展開する。 $ tar -zxvf proftpd-1.2.10rc3.tar.gz ($ tar -zxvf proftpd-1.2.9rc3.tar.gz ) 展開したディレクトリに移動し、configureを実行する ここでインストール先を変更したい場合は、"--prefix"を指定する 標準では、/usr/local以下にインストールされる $ cd proftpd-1.2.10rc3 ($ cd proftpd-1.2.9rc3 ) $ ./configure $ make root権限になって、インストールする $ su password ********** # make install
# rpm -ivh proftpd-1.2.9-1.9.i386.rpm 設定ファイルは/etc/proftpd.conf に作成される 起動スクリプトも/etc/rc.d/init.d/proftpdとして作成される
設定 ディレクトリ構造とファイル
/usr/local/sbin/proftpdメインプログラム
/usr/local/sbin/in.proftpdproftpdへのシンボリックリンク
/usr/local/etc/proftpd.conf設定ファイル
/usr/local/bin補助プログラム類
/usr/local/manマニュアル類

起動 # /usr/local/sbin/proftpd これでProftpdが起動する # ps ax | grep proftpd # kill 628 <--プロセスID しかし、RedHat系のディストリビューションの場合、以下のようなエラーが出る - no such group 'nogroup' - Fatal : Group: Unknown 'nogroup'. 設定ファイルが設定しているnogroupが無いというエラー Proftpdは、proftpd.confファイルにデフォルトで'nogroup'が設定されているので、これを変更する必要がある # gedit /usr/local/etc/proftpd.conf 27行目付近 User nobody Group nogroup ← これをnobodyに訂正する これで、起動してもエラーは出ない

FFFTPで接続しようとすると『501 NLST: Options not supported』となってファイルの一覧が見れない
これは以下の2つの原因がある
リモートサーバのファイルリストの取得に利用される NLST コマンドに、従来の proftpd (1.2.9 以前) では規格 (RFC959) で許されていないオプション指定を許していた一方、新バージョン (1.2.10 以降) では規格に添った形にするために、このオプション指定が不可能とされた
FFFTP が標準設定で NLST のオプション指定を利用していた

解決策
FFFTP のホスト一覧画面で、問題のホストを選択し、「設定変更」ボタンをクリック
「ホストの設定」
「高度」を選択します
「NLST -R を使って高速に再帰検索」のチェックを外した後、その上にある「LIST コマンドでファイルを取得」をチェックします。あとは「OK」ボタンで設定を終了

またはProFTPDを1.2.9 以前のバージョンにする

起動ファイル ( /etc/xinetd.d/proftpd ) 

# default: on
# description: The ProFTPD FTP server 
service ftp
{
     flags           = REUSE
     socket_type     = stream
     wait            = no
     user            = root
     server          = /usr/local/proftpd
     server_args     = -c /usr/local/etc/proftpd.conf
     log_on_failure += USERID
     disable = no
}
 
# vi /usr/local/etc/proftpd.conf
Servertype                 inetd

# /etc/rc.d/init.d/xinetd restart 


ディレクトリアクセス制限 FTPでアクセスする場合、ユーザ別でのアクセス制限をかけたくなるであろう! もちろん、Proftpもその手の制限は簡単に出来る。例として、以下のような条件でアクセス制限をかけてみる。 例1) home以下のusersグループのメンバーにはホーム以下の各メンバーディレクトリ以外のアクセスは禁止。また、rootグループのメンバーについては全てのディレクトリのアクセスを許可する。 DefaultRoot ~users, !root 例2) rootグループ以外は上位ディレクトリアクセス禁止。 DefaultRoot ~ !root ← 注:チルダとビックリマークの間のスペースが微妙に大切なので注意のこと(コネクト出来なくなります)! これらのような記述をproftpd.confのDefaultServerの下あたりに記述すれば良い。 DefaultRoot ~/public_html users, !root とにかくみんなディレクトリアクセス禁止 DefaultRoot ~/public_html !root 起動確認 # ps ax | grep proftpd 8322 ? S 0:00 proftpd (accepting connections) 設定ファイル /usr/etc/proftpd.conf ServerName サーバーの名前 UseReverseDNS off DNS Lookupを抑止します 名前が引けないことによるログイン不全を解消します ListOptions "-a" ディレクトリを表示する時の ls コマンドのオプションを指定します。.(ドット)で始まるファイル(.htaccessなど)を常に表示するようにするために、"-a"を指定しました。 各ユーザごとのディレクティブ(など)に限定して機能するようにもできる機能向上がなされました。 # ls で表示される初期値に -a を追加。これで隠しファイル(ドットで始まるファイル名)も表示 LsDefaultOptions "-a または ShowDotFiles off Group ftp パッケージのものでは大丈夫ですが、Apache と同様、GroupID=-2 は通らなくなります /etc/group 内で nogroup::65534: にするとOK ScoreboardFile /path/to/scoreboardfile proftpd.scoreboardファイルを作る場所を指定します。 Configureオプションにて --localstatedir=/var/run としても、同じ結果が得られます TransferLog /var/log/xferlog LogFormat default "%h %l %u %t \"%r\" %s %b" LogFormat auth "%v [%P] %h %t \"%r\" %s" LogFormat write "%h %l %u %t \"%r\" %s %b" ExtendedLog /var/log/proftpd/access.log WRITE,READ write ExtendedLog /var/log/proftpd/auth.log AUTH auth もちろん、/var/log/proftpd は作成しておく ftpユーザに~/以上を見せなくする(chrootする)  wu-ftpd では、/etc/passwd やら /etc/ftpaccess やらいろんなところを直してやっと出来るこのchrootですが、ProFTPD では proftpd.conf ファイル中に1行挿入するだけで済みます。 DefaultRoot ~  入れる場所ですが、きっと基本的にはどこでもいいんでしょう。僕はなんとなく、元々あったDefaultServerのすぐ下に挿入しました。  なお、既に wu-ftpd を使っていたときに同様の処理をしていた場合は、/etc/passwd ファイルを元に戻さないと期待した結果になりませんので、ご注意下さい。 AnonymousFTPを使えなくする  AnonymousFTP は、 ディレクティブによって制御されています。デフォルトでこのディレクティブはAnonymousFTPログインを許すようになっています。従って、単純に考えれば、このディレクティブ()をコメントアウトしてしまえば、Anonymousログインは出来なくなりますが、もうちょっといい方法がありそうです。  ここでは、ディレクティブを使ってみます。インフォサイエンスの日本語マニュアルを見ると、LOGIN というキーワードが存在していて、LOGIN 操作自体の制御が出来るらしいですから、これをデフォルトのディレクティブで囲まれた中へ追加してみます。 DenyAll  これで、Anonymousログインしようとすると、530 Login incorrect となればOKです。 Resumeを有効にする  よく巨大なファイルのFTPサーバへのアップロードやらFTPサーバからのダウンロードで、途中で回線が途切れてしまったり、何らかの事情で中断したあとで、続きをしたいときがありますね? こういうのをResumeという風に呼んだりするんですが、ProFTPDはデフォルトではこれらの動作を禁止しています。  これらを許可したい場合は、AllowStoreRestart/AllowRetrieveRestart の2つのディレクティブで制御します。 AllowStoreRestart on  これでアップロードのResumeが、 AllowRetrieveRestart on  同様にこれでダウンロードのResumeが、それぞれ可能になります。  なお、サーバ全域に行うことも、 やら やらの中に書けば、その範囲に関してだけ行うことも可能です。 inetデーモン経由で起動する  既に書いた通り、inetデーモン経由でも使えます。その場合は、/etc/inetd.conf をいじると同時に、/usr/etc/proftpd.conf 内の ServerType ディレクティブもいじる必要があります。デフォルトではここは standalone になっていますから、これを inetd に書き換えてください。そうしないと起動してくれません。起動してくれないときは、/var/log/syslog を見てください。"Check the ServerType directive to ensure you are configured correctly." というメッセージが残っていれば、これが原因です。 Passiveモードで使うポートを限定する  NATの内側のネットワークからFTP接続したいときなど、NATの設定上の問題でPassiveモードでないと接続できない場合があります。外部からの20番ポートへのアクセスを禁止されている場合などです。IP masquerade だったら、ip_masq_ftp というモジュールが勝手にやってくれますが、市販ルータではこれに相当する機能がついていない場合もあるようです。   このようなネットワークから自宅などのNATの内側のホストへのFTP接続を許可しようとした場合、Passiveモードにしないと接続できないことになりますが、NATのフィルタの制限を緩める関係でネットワークの使用するポートが既知でありたいということもあります。  このような場合の設定例が、こちらで紹介されています。Mini-HOWTO for ProFTPD and NAT という文書がそれです。/usr/etc/proftpd.conf 内で、下記のディレクティブを追記することで、上記のようなシチュエーションにおいてFTPサービスを利用可能にできます。 MasqueradeAddress aa.bb.cc.d PassivePorts 10020 10024  ここで、aa.bb.cc.d はNATの外側のグローバルアドレスです。IPアドレス固定のネットワークであれば、ここにIPアドレスを生々しく記述してもいいでしょう。もし、ISDNやxDSL、CATVなどの常時接続サービスを利用していて、IPアドレスが固定されていない場合は、DynamicDNSサービスをつかって名前でグローバルIPを引けるような環境を作った上で、ここにIPアドレスの代わりにDNSに登録した名前を用いることができます。   これで、Passiveモードではポート10020から10024だけをFTPデータコネクションに利用しますので、NATの設定ではこれらのポートの外部からのアクセスを許すようにすればいいのです。  なお、グローバルアドレスが固定されていない場合は、ProFTPD自体をinetdから起動するようにしたほうがいいみたいです。Standaloneで起動されていると、なにかの拍子にグローバルアドレスが変わってしまったときに接続できなくなります。ProFTPDがPORTコマンドで返してくるべきIPアドレスは、オンデマンドで名前引きするわけではなくて、起動時に見ているだけらしいので、昔のIPアドレスが返ってきてしまったりします(^^; SSH経由で接続する  FTPをSSH経由で接続するようにすると、パスワードを暗号化してネットワークへ流すことができるので、セキュリティレベルが上がります。SSH経由で接続(SSH PortForwarding)については、こちらで書いていますので、参考にしてください。違いは、フォワードするポートをFTP用にすることです。  ・・・ということを書こうと思ったら、もっと丁寧にかかれているサイトがありますね(^^; やっぱり。  ご紹介しますのでそちらをご覧下さい。 http://www.itboost.co.jp/inst/inst_17.php  ポイントは、上の4.で示したような設定にくわえて、AllowForeignAddress On というディレクティブを追記することです。これをしないと、ProFTPDはSECURITY ALERTを吐いて接続させてくれません。 自動起動の設定 # gedit /etc/rc.d/init.d/proftpd
#!/bin/sh

. /etc/rc.d/init.d/functions
if [ ! -f /etc/sysconfig/network ]; then
	exit 0
fi
. /etc/sysconfig/network
RETVAL=0
case "$1" in
	start)
		echo -n 'Starting proftpd: '
		daemon /usr/local/sbin/proftpd
		RETVAL=$?
		echo
		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/proftpd
		;;
	stop)
		echo -n 'Stopping proftpd: '
		pkill proftpd
		RETVAL=$?
		echo
		[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/proftpd
		;;
	status)
		status proftpd
		;;
	restart)
		killall -HUP proftpd
		;;
	*)
		echo "Usage: $0 {start|stop|status|restart}"
		exit 1
esac
exit $RETVAL
パーミッションを変更し、自動起動させたいランレベルのディレクトリにリンクさせます。(デフォルトランレベルが3の場合) # chmod 755 /etc/rc.d/init.d/proftpd # ln -s /etc/rc.d/init.d/proftpd /etc/rc.d/rc3.d/S21proftpd # ln -s /etc/rc.d/init.d/proftpd /etc/rc.d/rc5.d/S21proftpd # /etc/rc.d/init.d/proftpd start NISユーザーの認証 # gedit /usr/local/etc/proftpd.conf # The PersistentPasswd directive controls how proftpd handles authentication # Note: NIS or NIS+ users will most likely want to disable this feature, # regardless of proftpd's detected configuration defaults. # Failure to disable this will make your NIS/NIS+ maps not work! PersistentPasswd off バージョンによってはできないこともある (NISユーザーを使用する場合はRPM版でないとできない)

ぺんたん.info
あかいひ.com
IPくん.com
8枠.com - 競馬情報
galhime.com

PC Q&A||古い記事|雑学|ラーメン