ProFTP設定
ftpには、標準ディストリビューションのProFTPを使うことにします。構築するディレクトリ構成は、FTP側から見ると下記のようにしようと思います。
pubは全アカウントで同一ディレクトリを表示して、更新モジュール等管理者側からのファイル提供用(読取専用)に公開。
/
|
|-pub 0744
ここでつまづいたのが、この共有ディレクトリpubの作り方。Windows環境でftpを運用していたときは、WarFTPの機能でバーチャルマッピングが可能でした。しかし、ProFTPにはそんな機能ありません。探しに探して行き着いたのはmount。Linuxのファイルシステムを利用しろと言うことです。/usr/share/doc/proftpd-x.x.x/howto/Chroot.htmlの文末に載っています。ProFTPの機能だけを検索していたばかりに、このシンプルな解答に気づかず苦労しました。灯台下暗し…皆さんも探し回る前にまずはマニュアルを熟読しましょうね_| ̄|○|||
mount情報は再起動すると初期化されるので、これをPC起動時に自動的に反映させるようにします。起動時に必ず読み込まれるスクリプト/etc/rc.localに以下の要領で追記。
# mount --bind olddir newdir <-olddirが共有元
これでnewdirにアクセスするとolddirが操作できるようになります。ちなみに、300個ほどマウントしても大丈夫らしいです(詳細)
次はWAN側からの接続を受け入れるようにしましょう。ProFTPは標準ではPORTコマンドを受付けません。固定ポートが空いてしまうのでセキュリティ的な問題からでしょうか。私も通常ポート21は避けたいので、全く別のポートをPASVモードで使用するようにしました。
また、動作方法は、inetd経由でセッション毎に起動するように変更。個人利用ということもあり、メモリ節約のためにデーモン起動での常駐は外しました。少々動作が重くなりますが、セッション毎に設定ファイルを読直すので、DDNSでのIP変化にも対応できるというメリットもあります。
まずはFTP通信ポートの設定、21番以外にしたい場合、inetd設定のためにポート定義名を/etc/servicesに追加します。
ftpEX xxx/tcp <-xxxはポート番号、定義名はftpEX
ftpEX xxx/udp
この定義名(ftpEX)で/etc/inetd.confに起動条件を追記。
tcpwrapperを使って後々通信制御をしたいのでtcpd経由で起動させるようにします。
ftpEX stream tcp nowait root /usr/bin/tcpd in.proftpd
以上でinetdで動作させる下準備は整いました。
お次は一番悩むftpdの詳細設定です。/etc/proftpd.confのコメントやマニュアルを参考にして設定しました。また、パソコンおやじさんのProFTPD設定も参考にしています。
Port xxx <-/etc/servicesと同じ番号にする
MasqueradeAddress xxx <-ルータのWAN側アドレス又はドメイン名(DDNS等)
PassivePorts xxx yyy <-最小ポート番号 最大ポート番号
ServerType inetd <-inetd起動
DefaultRoot ~/ftp <-各アカウント以下のftpディレクトリをルートとするように設定
.
LogFormat allinfo "%t : %u (%a [%h]) : [%s], %T, %m (%f)"
LogFormat write "%t : %u : %F (%a)"
LogFormat read "%t : %u : %F (%a)"
LogFormat auth "%t : %u (%a [%h])"
.
ExtendedLog /var/log/proftpd/all.log ALL allinfo
ExtendedLog /var/log/proftpd/write.log WRITE write
ExtendedLog /var/log/proftpd/read.log READ read
ExtendedLog /var/log/proftpd/auth.log AUTH auth
.
UseReverseDNS off
IdentLookups off
.
# Allow clients to resume downloads (default on)
AllowRetrieveRestart on
# Allow clients to resume uploads (default off)
AllowStoreRestart on
# The maximum number of clients allowed to connect per host.(default none: no limit)
MaxClientsPerHost 3
MaxClients 30
# Sets the idle connection timeout (default: 600)
TimeoutIdle 300
.
<Directory ~/pub>
<Limit READ DIRS RETR>
AllowAll
</Limit>
<Limit WRITE STOR DELE MKD RMD RNFR RNTO SITE_CHMOD>
DenyAll
</Limit>
</Directory>
デーモン常駐はさせないのでサービスはオフに変更。
最後に、inetdを-HUPオプションで再起動させて設定完了。
# chkconfig proftpd off
# chkconfig --list proftpd
# killall -HUP inetd