manekineko倉金家ホームページ

趣味の部屋/サーバー構築メモ その2

FTPサーバーproftpd

2010年10月23日(土) 2012年8月23日(木)更新
ProFTPDを使い、FTPサーバーを立ち上げます。
標準の機能に加え、NLSTコマンドの有効化もやっておきます。


最近ホームページ関連ではブログ形式がメインでFTPによるアップロードなどはあまり行いませんが、写真集のダウンロードなどには便利でなので使えるようにしておきます。
CentOSの標準ftpはvsftpdですが、従来より使いなれたProFTPDを使います。
クライアントとしては昔からffftpが有名で、使っている友人も多く私自信も使っていますが、最近のproftpdはRFC規格に厳格に準拠したとかでffftpのNLSTコマンドが使用できません。
そうなったことをいちいち説明するのもめんどうなので従来どおり使えるようにNLST有効化パッチをあててビルド、インストールします。

ビルドとインストール
http://apt.sw.be/redhat/el5/en/source (RPMForge) より
proftpd-1.3.2-1.rf.src.rpmをダウンロード。
~/rpm/SRPMS/に置き、ソースインストール。
$ cd ~/rpm/SRPMS/
$ rpm -ivh proftpd-1.3.2-1.rf.src.rpm
ソースを展開しておきます。
$ tar jxvf prodtpd-1.3.2.tar.bz2

http://gochagocha.ribbon.to/source/よりNLST有効化パッチ
proftpd-1.3.2e-nlst-ffftp.patchをいただきました。感謝!
内容を確認したら少なくとも行番号と内容は合致しているのでそのまま今回のRPMForgeのバージョンに使えそうです。
ダウンロードしたファイルを~/rpm/SOURCES/に置き、ファイル名と中の1.3.2eの部分を1.3.2に変更しておきます。(patchの書き方など全く知らないけど、これでいいのかな?)

ためしにパッチ当て。
$ patch -p0 < proftpd-1.3.2-nlst-ffftp.patch
patching file proftpd-1.3.2/modules/mod_ls.c
となり、一瞬で完了。いいようです。
古いprodtpd-1.3.2.tar.bz2を捨てて再度パッチ当てしたソースから作成。
$ tar jcvf proftpd-1.3.2.tar.bz2 proftpd-1.3.2

再ビルド。
$ cd ../SPECS/
$ rpmbuild -ba proftpd.spec
........
$ cd ../RPMS/i386/; ls
rpmができています。本体のみインストール。
$ su
# rpm -ivh proftpd-1.3.2-1.rf.i386.rpm

/etc/yum.conf および /etc/yumex.conf の exclude に proftpd* を追加しバージョンの固定をしておきます。

設定
設定ファイルは/etc/proftpd.confだけ。以下おもなところ。
# オープニングメッセージに表示されるサーバー名。好みで。
ServerName    "FTP server on iroribata.net"
# STANDALONEで起動。ほとんどリソースはくわないのでinetdの必要はなさそう。
ServerType    standalone
# ファイルのタイムスタンプを日本時間で表示する。
TimesGMT     off
SetEnv  TZ  :/etc/localtime
# ユーザのホームディレクトリのみ表示。
DefaultRoot   ~
# onにすると遅くなるしDNSが引けないとつながらない。
IdentLookups      off
UseReverseDNS     off
# ポートは標準のFTPポート21を使用。
Port      21
# 安全のためユーザ以外の書込と実行権限を落しておく。
Umask      022
# ドットファイルも表示。
ListOptions      "-a"
# rootでのログイン不可、認証トライは3回まで。
RootLogin      off
LoginPasswordPrompt  on
MaxLoginAttempts      3
# Resume機能(途中で転送を中断した後の途中からの継続)を有効にする。
AllowRetrieveRestart    on
AllowStoreRestart       on
# アップロードが途中で中断されたとき中途のファイルは削除。
DeleteAbortedStores  on
# 子プロセスの数、1ホストからの接続数を制限。
MaxInstances    30
MaxClientsPerHost  10
PassivePorts    6021  6050
…MaxInstancesの分だけ空いているポートでPassivePortsを指定。
  ファイアウォール(/etc/sysconfig/iptables)にも許可設定しておくこと。

# 外部から確実にこのサーバーに到達するアドレス。
MasqueradeAddress  ftp.iroribata.net
# 認証が成立するまで仮に動作するユーザ、グループ。なるべく権限のないもの。
User    nobody
Group   nobody
#systemlogをとる。あとでアタックの検知に使う。
SystemLog /var/log/proftpd/proftpd.log
# その他のログは少し見やすく変更して。
LogFormat    default    "%t %h %u \"%r\" %s %b"
LogFormat    auth       "%t %h \"%r\" %s %u"
#アクセスログ。
ExtendedLog    /var/log/proftpd/access.log WRITE,READ default
#認証ログ。
ExtendedLog     /var/log/proftpd/auth.log AUTH auth
# ファイル転送ログ。
TransferLog     /var/log/proftpd/xfer.log

テスト
起動設定をして起動します。
# chkconfig proftpd on
# service proftpd start

ffftp やブラウザからつないでみます。
予想通りSELinuxさん登場!。
SELinux Administrationより、
Boolean → FTP → Allow ftp to read/write files in the user home directories にチェックしてOK。

それにしても自分のホームディレクトリを読み書きするのにいちいちSELinuxさんに許可をお願いするなんて...。登録されたソフト以外ではだめなんだな、きっと。

ffftpのNLST、LISTコマンドどちらでも、また通常、PASSIVEモードどちらでもOKなのを確認。ただサーバーと同一ルーター内からだとPASSIVEモードでないとつながりません。なんでだろう?
そういえば昔使っていたルーターで同一ルーター内からは自分のホームページが見れないことがありましたがあのたぐいかな。

以上でFTPサーバー完了。


おまけ:FTPサイト用ファイルブラウザ WebShare …2012.8.23追加
写真や資料などをホームページとは別にFTPサイトに保存して公開する場合も多いかと思いますが、その場合ftpでつないでファイル名だけ見ても中身が全然わかりません。
そのような場合、写真ファイルなどをサムネイル画像で表示してくれて写真などもその場で見れるファイルブラウザを導入するとftpサイトの閲覧がとても楽になります。
このためにファイルブラウザ WebShareというのを導入してみました。

もちろん無料のソフトで、写真やファイルの一覧が見れてさらにファイルのダウンロードやアップロード、簡単なテキストファイルの作成なども行えます。お薦め!