標準出力

新しいもの、変わらないこと 自分の頭を通して考えてみました (stdout)

vsftp from xinetd

stand-aloneではなく、xinetdからFTPサーバ(vsftp)を構築する。
今回も On FreeBSD (Ver. 9.0)

まず、xinetdをコンパイル&インストール

cd /usr/ports/security/xinetd
make config-recursive
make install


マニュアル、「man vsftpd.conf」や
 http://www.express.nec.co.jp/linux/distributions/knowledge/network/xinetd.html

参考にさせてもらいながら設定をする。
デフォルト設定ファイルを/usr/local/etc/xinetd.confを作成して、以下を記述。

#default configuration
defaults{
  instances = 60
  log_type = FILE /var/log/servicelog # syslog も指定できるみたい
  log_on_success = PID
  log_on_failure = HOST
  disabled = restatd
  cps = 35 30
}

includedir /usr/local/etc/xinetd.d


起動時にサービス起動できるように./etc/rc.confに以下を追加

xinetd_enable="YES"

つぎにvsftpのコンパイル&インストール

cd /usr/ports/ftp/vsftp
make config-recursive
make install

設定に関するドキュメントは、/usr/local/share/doc/vsftpd/EXAMPLE/INTERNET_SITE/
以下にある。

まず、xinetdの各サービスの設定ファイルを格納するディレクトリを作成する
mkdir -p /usr/local/etc/xinetd.d

そして、xinetdのvsftpd用の設定ファイルのサンプルファイルをコピーする

cd /usr/local/share/doc/vsftpd/EXAMPLE/INTERNET_SITE/
cp vsftpd.xinetd /usr/local/etc/xinetd.d/vsftpd

そして、コピーしたファイルに少し手を加える以下は、サンプルと手を加えた後のファイルの差分。



*** vsftpd.org Sun Sep 16 01:18:59 2012
--- vsftpd Sun Sep 16 01:03:52 2012
***************
*** 5,15 ****
          socket_type             = stream
          wait                    = no
          user                    = root
!         server                  = /usr/local/sbin/vsftpd
          per_source              = 5
          instances               = 200
!         no_access               = 192.168.1.3
!         banner_fail             = /etc/vsftpd.busy_banner
          log_on_success          += PID HOST DURATION
          log_on_failure          += HOST
  }
--- 5,15 ----
          socket_type             = stream
          wait                    = no
          user                    = root
!         server                  = /usr/local/libexec/vsftpd
!         #server_args             = start
          per_source              = 5
          instances               = 200
!         banner_fail             = /usr/local/etc/vsftpd.busy_banner
          log_on_success          += PID HOST DURATION
          log_on_failure          += HOST
  }


banner_fail は、instancesで指定した上の接続要求が来た場合のメッセージを格納したファイルをしていしており。中身は、下記のようにした。

421 Server busy , please try again later.


さらに、vsftpd本体の設定ファルサンプルをコピーする。

cp /usr/loca/share/doc/vsftpd/EXAMPLE/INTERNET_SITE/vsftpd.conf /usr/local/etc/

そして、自分の環境に合わせてコピーした設定ファイルを変更する。下記は、サンプルファイルと変更後ファイルの差分である。

*** /usr/local/share/doc/vsftpd/EXAMPLE/INTERNET_SITE/vsftpd.conf Sat Feb  2 10:30:40 2008
--- /usr/local/etc/vsftpd.conf Sun Sep 16 00:39:40 2012
***************
*** 1,6 ****
  # Access rights
! anonymous_enable=YES
! local_enable=NO
  write_enable=NO
  anon_upload_enable=NO
  anon_mkdir_write_enable=NO
--- 1,7 ----
  # Access rights
! listen=NO # default では、YESらしくこれは、スタンドアロンを意味するのでNOを指定
! anonymous_enable=NO 
! local_enable=YES
  write_enable=NO
  anon_upload_enable=NO
  anon_mkdir_write_enable=NO
***************
*** 17,23 ****
  ascii_download_enable=NO
  async_abor_enable=YES
  # Performance
- one_process_model=YES # linux 用の設定なので削除
  idle_session_timeout=120
  data_connection_timeout=300
  accept_timeout=60
--- 18,23 ----

そして、下記ディレクトリ作成

mkdir /usr/share/empty



ここまでで一応設定は完了

xinetdを起動する

/usr/local/etc/rc.d/xinetd start

そして、ftpログインしてみる


無事ログイン出来ればOK

しかし、この設定では、ログイン後にホームディレクトリ以上に移動できてしまうのでそれを禁止したい。
chrootの設定をする必要がある。今回は、外部公開は、していないのでとりあえず次回。