ftpサーバを立てる(設定)
やっと proftpd がインストールできたので、設定を調整することにします。設定ファイルは /etc/proftpd/proftpd.conf です。
proftpd.conf
追加変更したところのみ抜粋です。
$ e /etc/proftpd/proftpd.conf UseIPv6 off ServerName "FTP Server" DefaultRoot /home/www/xx.5-55.jp/public/ nogroup DefaultRoot ~ !admin CharsetLocal UTF-8 CharsetRemote CP932 IdentLookups off UseReverseDNS on TimesGMT falseAllowOverwrite on Umask 000 AllowAll DenyGroup !admin AllowGroup admin DenyAll IgnoreHidden on
- IPv6 はなにかが足りなくてエラーになったので、どうせ使わないし off にしました。
- ServerName が proftpd だとわかったからといって、すぐどうなるというわけじゃないんでしょうけど、一応慣例通り無難な文字列にしてみました。
- DefaultRoot で使用者を絞ってます。1行目で nogroup グループのユーザのルートディレクトリを /home/www/xx.5-55.jp/public/ にします。こうすると、これより上位のディレクトリに移動できなくなります。
2行目は admin グループ以外のすべてのグループのユーザは自分の home ディレクトリをルートディレクトリにする設定です。user なら /home/user がルートになり、それより上位へはいけません。
admin グループのユーザはそれだと不便なので、制限を外しています。 - Charset関連で今回がんばった日本語変換を指定しています。これを指定しないとパッチを当てた意味がないです。
サーバ内(CharsetLocal)は UTF-8 で、クライアント(CharsetRemote)は CP932(Shift-JIS)の設定です。 - IdentLookups を off にするとリモートユーザー名を確認しないので接続が速くなります。
- UseReverseDNS は on にして、ログにユーザのIPを逆引きでのせることにします。
- TimesGMT は false にして、サーバのローカルタイム(日本時間)を使用することにします。off じゃなくて false じゃないとダメと書いてあったブログがあったので false にしてありますが、off と書いてあるところがほとんどなので大丈夫なんじゃないかなと内心思っています。
- Directory で nogroup のユーザのルート(/home/www/xx.5-55.jp/public)の設定をしています。基本、このディレクトリ配下は好き勝手やっていいという前提で、上書きOK、書込み、削除、実行なんでも可にしておきます。(実行はまずいか。でもftp経由だから実行はできないはず)
あと、.htaccessファイルがいじられると嫌なので、admin グループ以外いじれないようにしておきます。
Passive モードの設定は面倒臭そうだったのでやっていません。今回はそんなに高速多量なダウンロードを行うわけじゃありませんから。
以上で設定は完了です。proftpd をリスタートしておきます。
$ s /etc/init.d/proftpd restart
ユーザ管理
ftp を使用できるユーザを限定したいと思います。誰でもOK(Anonymous)な指定はデフォルトで off になっていますが、設定を追加しないと、自サーバ(Ubuntu)のユーザだと誰でも入れるようです。
proftpd がインストール時に勝手に作る proftpd@nogroup と ftp@nogroup はあとで汎用的に使いたいことがでてくるかもしれませんので、これらとは別に xxx@nogroup というユーザを作っておきます。
$ s useradd -g nogroup xxx $ s passwd xxx $ id -a xxx uid=1001(xxx) gid=65534(nogroup) groups=65534(nogroup)
無事 xxx ユーザが nogroup グループに作られました。
トラブルその1(時刻がずれる)
TimesGMT を false にしているにも関わらず、時刻が9時間ずれていました。GMTで表示されています。どうして?
サーバの環境変数 TZ を設定していなかったことが原因でした。
$ export TZ=JST-9
これがないと、TimesGMT の機能自体が有効にならないようです。とりあえずの設定はこれでいいですが、ちゃんとやるのであれば、.bashrc とか .bash_profile、/etc/profile、/etc/environment などに適宜登録しておいてください。(後ろへいくほどよりグローバルです)
トラブルその2(ftpでファイルが書けない)
xxx ユーザでログインもできて、ファイル一覧も出るのですが、ファイルを転送しようとすると 550エラーがでます。なにか設定が間違っているの?
ルートディレクトリのパーミッションがオーナー以外書込み禁止になっていたのが原因でした。
$ chmod -R 777 /home/www/xx.5-55.jp/public
ftp の設定ばかりに気をとられていてなかなか気づけませんでした。
おまけその2(ftp サーバの URL について)
proftpd の設定ではドメイン名やサブドメイン名についての設定は見当たりません。でも、世の中一般的に ftp サーバの URL は、ftp.example.com のようにサブドメインになっているケースが多いじゃないですか。
で、よーく、よーく、(5分くらい)考えたところ、proftpd は結局 IPアドレスでのサービスに帰着するので(ftp://xxx.xxx.xxx.xxx)、サブドメインを DNS がどの IPアドレスに割り振るかなんだなということですね。
うちの場合、DNS はこんな風(↓)になっています。この DNS設定だと ftp.5-55.jp とやっても、xxx.5-55.jp とやってもすべて同じ IPアドレス(光電話ルータのWAN側アドレス)に飛んでくるので、サブドメイン付け放題ですね。(意味なし。あとで ftpサーバを分離するなどしたときは意味あり)
$ cat /etc/bind/db.5-55.jp $TTL 86400 @ IN SOA 5-55.jp. root.5-55.jp.( 2008041801 ; Serial = today 28800 ; Refresh = 8 hours 14400 ; Retry = 4 hours 3600000 ; Expire = 1000 hours 86400 ) ; Minimum = 1 day IN NS ns1.5-55.jp. IN NS ns.maihama-net.com. ; セカンダリネームサーバ(マイハマネット) IN MX 10 mail.5-55.jp. ns1 IN A 219.117.201.174 ; サーバの固定IPを指定 ns1.5-55.jp mail IN A 219.117.201.174 ; mail.5-55.jp 2 IN A 219.117.201.174 ; 2.5-55.jp @ IN A 219.117.201.174 ; 5-55.jp * IN A 219.117.201.174 ; *.5-55.jp
参考
- こちら(→ http://blog.marupara.dyndns.org/2008/01/ubuntuproftpd.html )にはすごくお世話になりました。ありがとうございました。
- すばらしいパッチ、ありがとうございます。こちら(→ http://www.hakusan.tsg.ne.jp/tjkawa/software/misc/proftpd-iconv/index.jsp )
- こちら(→ http://jibunstyle.net/debian/server.html )も参考になりました。
- こちら(→ デビアンパッケージにパッチを当ててリビルドする - Iselix雑記(β) )にも同じ内容が簡潔に書かれています。
- こちら(→ FTPT[oiproftpdj )は設定ファイルのコメントが参考になります。
- diff のマニュアルはこちら(→ http://www.linux.or.jp/JM/html/gnumaniak/man1/diff.1.html )
- 解凍圧縮についてはこちら(→ tar/zipコマンドで解凍・圧縮一覧まとめ(gz、zip、tar.xzなど) )
- gnu nano エディタの使い方についてはこちら(→ 林檎生活100: GNU nano入門.コマンドリファレンスを作ってみた. )。行番号の確認って、ctrl+C だったんですよね。
- パッケージ関係についてはこちら(→ Debian Tips )を参考にさせていただきました。