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          false


  AllowOverwrite 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 の設定ばかりに気をとられていてなかなか気づけませんでした。

おまけその1(RT-200NEの設定)

自宅サーバを光電話ルータで公開している場合、ftpのポート(21)を開けてあげないといけません。詳しくは書きませんが、設定例を置いておきます。

おまけその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

参考

  1. こちら(→ http://blog.marupara.dyndns.org/2008/01/ubuntuproftpd.html )にはすごくお世話になりました。ありがとうございました。
  2. すばらしいパッチ、ありがとうございます。こちら(→ http://www.hakusan.tsg.ne.jp/tjkawa/software/misc/proftpd-iconv/index.jsp )
  3. こちら(→ http://jibunstyle.net/debian/server.html )も参考になりました。
  4. こちら(→ デビアンパッケージにパッチを当ててリビルドする - Iselix雑記(β) )にも同じ内容が簡潔に書かれています。
  5. こちら(→ FTPƒT[ƒoiproftpdj )は設定ファイルのコメントが参考になります。
  6. diff のマニュアルはこちら(→ http://www.linux.or.jp/JM/html/gnumaniak/man1/diff.1.html )
  7. 解凍圧縮についてはこちら(→ tar/zipコマンドで解凍・圧縮一覧まとめ(gz、zip、tar.xzなど) )
  8. gnu nano エディタの使い方についてはこちら(→ 林檎生活100: GNU nano入門.コマンドリファレンスを作ってみた. )。行番号の確認って、ctrl+C だったんですよね。
  9. パッケージ関係についてはこちら(→ Debian Tips )を参考にさせていただきました。