proftpd 1.2.9rc1 のインストール
2003-09-01 作成 福島
2005-04-12 更新 福島
TOP > tips > proftpd
DefaultRoot ディレクティブについて
proftpd Version 1.2.10 からは chroot/etc/hosts が存在しないとセッションが切断される場合があります。
(FQDN を指定せず、ホスト名 (localhost 等) で接続した場合)
421 Service not available, remote server has closed connection
バグです。アホらしいのでこれ以上追求していません。

リストコマンドについて
proftpd Version 1.2.10 から NLST コマンドが無くなりました。
このため、FFFTP のデフォルトではディレクトリ表示が出来ません。
[ホスト一覧] -> [設定変更] -> LIST コマンドでファイル一覧を取得(L)
にチェックを入れる必要があります。

$ tar xzf proftpd-1.2.9rc1.tar.gz
$ cd proftpd-1.2.9rc1
proftpd-1.2.9rc1$ vi src/fsio.c
FTP クライアントソフトから chmod コマンドを使われてもグループ s ビットが変化しないようパッチを当てる ( fetch 対策)
static int sys_chmod(pr_fs_t *fs, const char *path, mode_t mode) {
  struct stat buf ;
  mode_t fmode = stat(path,&buf) ;
  fmode = (buf.st_mode & ~(S_IRWXO | S_IRWXG | S_IRWXU)) | (mode & (S_IRWXO | S_IRWXG | S_IRWXU)) ;
  return chmod(path,fmode) ;
}
proftpd-1.2.9rc1$ install_user=root install_group=wheel ./configure proftpd-1.2.9rc1$ make proftpd-1.2.9rc1$ su proftpd-1.2.9rc1# make install proftpd-1.2.9rc1# vi /usr/local/etc/proftpd.conf
ServerType  inetd                 inetd,xinetd から起動させるので inetd にする
Group       nobody                RedHat のデフォルトに nogroup は存在しないので変更する
<Anonymous> を全てコメントアウト  anonymous はなるべく使わない
proftpd-1.2.9rc1# cat >> /etc/shells FTP アカウントの shell は passwd コマンドしてやるため、これが必要
/usr/bin/passwd

xinetd を使う場合 proftpd-1.2.9rc1# vi /etc/xinetd.d/ftp
service ftp
{
    flags           = REUSE
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/local/sbin/in.proftpd
    log_on_failure  += USERID
    disable         = no
}
proftpd-1.2.9rc1# /etc/rc.d/init.d/xinetd restart
inetd (tcpd) を使う場合 proftpd-1.2.9rc1# vi /etc/inetd.conf
ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/in.proftpd
proftpd-1.2.9rc1# /etc/rc.d/init.d/inet restart
proftpd.conf で bind を省略すると、ホスト名から IP アドレスを解決しようとします。 IP アドレスが解決できないと起動に失敗し、エラーログも残りません。 そんなときは、(inetd ではなく) コマンドラインから手動で in.proftpd を立ち上げてみましょう。
fetch 対策 fetch は元々のパーミッションを無視して自分の設定をサーバに強制します。 そして 4 桁の 8 進数を認めないので、2755 等の s ビットの設定が出来ません。 つまり、1 度でもファイルを転送すると、s ビットがクリアされ、元に戻すことが出来ないのです。 プログラムがタコなだけですが、そんなことは macintosh ユーザには理解できません。 (FFFTP には回避方法があります) UMASK ステートメントでも s ビットの変更は禁止できません。 仕方が無いのでサーバを macintosh ユーザに合わせます。 ちなみに、このパッチを proftpd 開発グループにメールし、 s ビットを変更しない拡張とそのオプションを提案しましたが、見事に無視されました。