このページではLinuxで構築した自宅サーバー上のFTPサーバーvsFTPdの設定ファイルvsftpd.confの設定方法を初心者向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
FTPサーバーの構築

FTPサーバーについて


vsFTPdの基本設定
(WBEL3,4_CentOS3,4)

ローカルユーザー接続の設定
(WBEL3,4_CentOS3,4)

アノニマスFTPの設定
(WBEL3,4_CentOS3,4)

vsFTPdのコントロール
(WBEL3,4_CentOS3,4)

vsFTPdの動作チェック
(WBEL3,4_CentOS3,4)


vsFTPdの基本設定
(CentOS5)

ローカルユーザー接続の設定
(CentOS5)

アノニマスFTPの設定
(CentOS5)

vsFTPdのコントロール
(CentOS5)

vsFTPdの動作チェック
(CentOS5)


ポートフォワーディングの設定


vsFTPdの構築に必要なファイル(CentOS5)

この コンテンツ に従って普通に CentOS5 インストール すると、 vsFTPd とその設定に必要なファイル類は既に 構築中のLinuxサーバー にインストールされているはずです。

以下にCentOS5にインストールされているvsFTPdで、操作や設定が必要なファイルを示します。

WBEL3,CentOS3,WBEL4,CentOS4 では以下とレイアウトが異なりますので、これらの ディストリビューション でvsFTPdを構成する場合は vsFTPdの基本設定(WBEL3,4_CentOS3,4) をご覧ください。

vsFTPdの必要ファイル一覧
vsFTPdの必要ファイル一覧

vsFTPdの本体プログラムは"/usr/sbin/vsftpd"ですが、これを直接呼び出すことはまずありません。

実際にはこの"/usr/sbin/vsftpd"を用いて、起動や終了を容易にコントロールできるように記述された スクリプト である "/etc/rc.d/init.d/vsftpd" を用います。

また"/etc/rc.d/init.d/"の シンボリックリンク が"/etc/init.d/"になっていますので、スクリプトは "/etc/init.d/vsftpd" でも呼び出すことができます。

例えば、

"/etc/init.d/vsftpd start" →vsFTPdの起動

"/etc/init.d/vsftpd stop" →vsFTPdの停止

という使い方になります。

"/etc/rc.d/init.d/" には パス が通っていません パスが通っていないディレクトリにあるファイルの実行 から、パスを省略して実行することはできませんので注意してください。

vsFTPdの設定ファイルの中心は "/etc/vsftpd/vsftpd.conf" です。

vsftpdはほとんどの動作についてこの"/etc/vsftpd/vsftpd.conf"の内容を参照しますが、 ユーザーアカウント ごとのアクセスに関しては、予め準備されている "/etc/vsftpd/ftpusers" "/etc/vsftpd/user_list" の二つのユーザーリストファイルと、必要な場合に作成する "/etc/vsftpd/chroot_list というユーザーリストファイルを使用します。

ところで、CentOS5のvsFTPdのユーザーリストファイルは、旧バージョンのCentOSやWBELにインストールされているvsFTPdのユーザーリストファイルとパスもファイル名も異なります。

そこで旧バージョンのユーザーリストファイルの内容を適切な位置のユーザーリストファイルにコピーするシェルスクリプト "/etc/vsftpd/vsftpd_conf_migrate.sh" が準備されています。詳細についてはこのページの最後に説明します。

このページの先頭へ↑

"/etc/vsftpd/vsftpd.conf"の編集(CentOS5)

まず、 サブネット 内の適当な クライアント機 から SSHクライアント 構築中のLinuxサーバー ログイン します SSHクライアントでサーバーに接続する(CentOS5)

それから su コマンド アカウント "root" に変更し、 cp コマンドでバックアップを作成した後、 nano エディタで "/etc/vsftpd/vsftpd.conf" を開きます nanoエディタでファイルを開く

[tanaka@web1 ~]$ su -Enter
パスワード: "root"のパスワードを入力します。 Enter
[root@web1 ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf
.org
Enter
[root@web1 ~]# nano /etc/vsftpd/vsftpd.confEnter


nanoで/etc/vsftpd/vsftpd.confを開く
nanoで"/etc/vsftpd/vsftpd.conf"を開く

"/etc/vsftpd/vsftpd.conf/" は、 vsFTPd が動作中でも自由に書き換えることができます。

ただし、 CentOS サーバー アプリケーション は通常、設定ファイルを保存しただけでは設定は反映されません。もちろんvsFTPdも例外ではありません。

サーバーアプリケーションの設定ファイルは、通常サーバーアプリケーションの起動時に参照されて読み込まれますから、設定ファイルの保存後にサーバーアプリケーションの再起動を行うか、設定ファイルの再読み込みのコマンドを実行しなければ、設定ファイルの修正は有効になりませんので注意してください。

vsFTPdの再起動、設定ファイルの再読み込みについては、 vsFTPdのコントロールについて(CentOS5) で説明します。

このページの先頭へ↑

vsftpd.confの編集(CentOS5)

以下に編集前の"/etc/vsftpd/vsftpd.conf"の内容を示します。

青色 で注釈を入れている設定は ローカルユーザー接続 に関する部分です。

緑色 で注釈を入れている設定は アノニマス接続 に関する部分です。

オレンジ で注釈を入れている設定は、その両方に関係する部分で重要なものです。

灰色 で注釈を入れている設定は、特に変更や解釈の必要のないものを示します。

# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES
 A1.アノニマスFTPサーバーを有効にする
#
# Uncomment this to allow local users to log in.
local_enable=YES
 L1.ローカルユーザーからのFTP接続を有効にする
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
 FTP経由でのファイルの書き込みを有効にする
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
 FTPでアップロードされたファイルのパーミッションの指定
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
 A2.アノニマス接続でのファイルのアップロードを許可する
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
 A3.アノニマス接続でのディレクトリの作成を許可する
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
 1.接続ユーザーへメッセージを送信する
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
 アップロードとダウンロードのログファイルを記録する
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
 データの送信に20番ポートを使用する
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
 アノニマスからのアップロードファイルの所有ユーザーを変更する
#chown_username=whoever
 アノニマスからのアップロードファイルの所有ユーザーの指定
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
 ログファイルの場所の指定
#
# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=YES
 標準のログファイル形式にする
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
 ユーザーからコマンドが来なくなってからの切断時間(デフォルトは300秒)
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
 ユーザーとのデータ送受信が途切れてからの切断時間(デフォルトは300秒)
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
 アカウントを持たないログインユーザーの仮アカウントの指定(デフォルト:nobody)
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
 FTPコマンド"async ABOR"を有効にする
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
 2.アスキー形式のアップロードを有効にする
#ascii_download_enable=YES
 3.アスキー形式のダウンロードを有効にする
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
 4.ユーザーログイン時のメッセージの指定
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
 アノニマス接続を拒否する電子メールアドレスリストの使用
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
 アノニマス接続を拒否する電子メールアドレスリストファイルの指定
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
 L2.上位ディレクトリ参照ユーザーリストの使用
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
 L3.上位ディレクトリ参照ユーザーリストファイルの指定
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
 FTPコマンド"ls -R"の実行を許可する
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES
 5.スタンドアロン動作モードを指定
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd whith two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES

pam_service_name=vsftpd
 L4.PAM認証サービス名の指定(/etc/vsftpd/ftpusersの有効化)
userlist_enable=YES
 L5.アクセスユーザーリストを有効にする
tcp_wrappers=YES
 6.TCP Wrapperによるアクセス制御を有効にする

"#" で始まる行はコメント行として無視されます。つまり、この"/etc/vsftpd/vsftpd.conf"の内容の大部分は設定のための解説文で、実際の設定パラメータは一部です("#"の後に一つスペースが入ってから記述されている行です。)。

"/etc/vsftpd/vsftpd.conf"の中で、明示的に"#"で無効化されているキーワードがある場合は、基本的に相反する設定が デフォルト で有効になっていますから、このキーワードを有効にする場合は、通常"#"を削除すればOKです。

また先頭に"#"がないキーワードは、先頭に"#"を付けて無効化すると、基本的に相反する設定値に置き換わります。

このファイルをこれから編集していきますが、以下のパートでは vsFTPd 全体に係わる オレンジ の設定部分について解説します。

また、デフォルトの"/etc/vsftpd/vsftpd.conf"に記述されていないキーワードについてもいくつか追加設定する必要がありますので、これも合わせて解説します。

このページの先頭へ↑

vsftpd.confの基本設定(CentOS5)

以下で設定するキーワードは、 vsFTPd の動作全般に係わる部分ですから、 ローカルユーザーからの FTP 接続 を設定する場合でも、 アノニマスFTP を設定する場合でも共通で設定を行ってください。

"dirmessage_enable"〜1.ユーザーのへメッセージ送信

FTP 接続を行ってきた相手に対してメッセージを送るためのキーワードです。

ローカルユーザー接続の場合は、 "/home/[ユーザー名]/.message" アノニマス接続 の場合は "/var/ftp/.message" というファイル名で テキスト ファイルを作成しておくと、それぞれに ログイン が完了したときに接続したユーザー宛にコマンドでメッセージが送られます。

ただ、 FTPクライアント の種類や設定によっては、実際にメッセージを送っても表示されない場合がありますし、送られてもあまり見る人はいないでしょう。

これは FTPサーバー の動作にはあまり重要ではないキーワードですから、任意に設定してかまいません。

ただ デフォルト

dirmessage_enable=YES
 1.接続ユーザーへメッセージを送信する

のままでも、メッセージファイルを準備しなければ無視されるだけですから、強いて

dirmessage_enable=NO

に変更する必要はありません。

"ascii_upload_enable"〜2.アスキー形式のアップロード

FTP は元々 バイナリ 形式のファイルの送受信を担う プロトコル で、 テキスト 形式のファイルの送受信は後から追加サポートされました。

そのため、テキスト形式のファイルの送受信を行うには、明示的に ASCII 形式のデータの取り扱いを有効にする必要があります。

従って、コメント化により無効化されている、

#ascii_upload_enable=YES
 アスキー形式のアップロードを有効にする

から"#"を削除して設定を有効にしてください。

ascii_upload_enable=YES

もちろん、FTPでテキストファイルを全く扱わないのであればそのままでも構いません。

ただよほど特殊な運用方法ではない限り、「FTPでテキストファイルを扱わない」ということはないでしょう。この設定変更は定石だと考えてください。

"ascii_download_enable"〜3.アスキー形式のダウンロード

上の2.と同じ理由で有効化する必要がありますので、 デフォルト

#ascii_download_enable=YES
 3.アスキー形式のダウンロードを有効にする

を、

ascii_download_enable=YES

に修正してください。

"ftpd_banner"〜4.ユーザーログイン時のメッセージ

動作の順序を考えると 1. とは記述の順序が逆ですが、この"ftpd_banner"キーワードは、ユーザーが FTPサーバー に接続し、認証を行う前にユーザーに送るメッセージを設定するものです。

表示されるのは、 "ftpd_banner=" から行末までのメッセージです。

デフォルト では

#ftpd_banner=Welcome to blah FTP service.
 4.ユーザーログイン時のメッセージの指定

と、例文とともに"#"で無効化されていますから、"#"を削除して適当なコメントに書き換えればOKです。

ただし、最近は コマンド 入力で FTP 接続が行われることは非常に少なくなり、一般にFTP接続には、接続とログインを自動で行う Webブラウザ FTPクライアント アプリケーション が使われるようになっていますから、その間に表示するメッセージは、今ではもうあまり意味がないかもしれません。

という訳ですから、設定を有効化する必要はないと思われます。

"listen"〜5.vsFTPdをスタンドアロンモードで動作させる

vsFTPd は、単独の デーモン プログラムとして、 スタンドアロンモード として稼動させる方法と、 xinetd などの サーバーデーモン の管理下で稼動させる方法があります。

"listen=YES" つまり、vsFTPdが自分自身でアクセスに聞き耳を立てる(listenする)、ということで、スタンドアロンモードを指定するキーワードになっているわけです。

デフォルト の設定である、

listen=YES
 5.スタンドアロン動作モードを指定

では、スタンドアロンモードでの動作が選択されています。

このキーワードを"#"でコメントアウトするか、

listen=NO

に書き換えると、サーバーデーモンに依存して稼動するようになります。もちろんこの場合は同時にxinetdの設定を変更してxinetdがvsFTPdの動作を管理できるようにする必要があります。

例えば、 メインメモリ の使用量を節約できるとか、そういう部分です。

vsFTPdは、スタンドアロンモードよりもxinetdを利用したほうが有利な点がいくつかありますので、 ディストリビューション によってはデフォルトでxinetd依存になっているケースも少なくありません。

きっと、WBELやCentOSは"Enterprise版"という立場上、メモリの節約などよりも「立派な実用サーバーとして稼動すること」を目的としているためでしょう。

ただ、 CentOS5 に標準で インストール されているvsFTPdは、基本的にスタンドアロンモードでの動作に合わせて設定されていますし、もともとvsFTPdは小さなプログラムなので、xinetdを使わないからといって 構築中のLinuxサーバー の動作に影響を及ぼすほどの負荷があるわけではありませんから、いろんな部分の設定を変更してまで動作モードを変える必要はないでしょう。

設定はそのままにしておきます。

"tcp_wrappers"〜6.TCP Wrapperによるアクセス制御

OS に組み込まれているアクセス制御システム TCP Wrapper を、 vsFTPd で利用するか否かのキーワードです。

デフォルト は、

tcp_wrappers=YES
 6.TCP Wrapperによるアクセス制御を有効にする

ですから、TCP Wrapperが動作していればそれを利用して、 クライアント からの接続をその IPアドレス によって接続許可、接続拒否の制御を行うことができます。

ただ宅内に設置する サーバー機 のvsFTPdへの接続許可、接続拒否をIPアドレスで行う場面があるとすれば、通常は LAN WAN で分ける、つまり プライベートIPアドレス グローバルIPアドレス に分けて制御するくらいしかないでしょう。

だとすれば、わざわざTCP Wrapperを利用する必要はありません。

WAN側からのアクセスは最初から ルーター NAT + IPマスカレード で遮断されていますし、LAN側からのアクセス制御は、もし必要であれば"/etc/vsftpd/vsftpd.conf"にキーワードで設定可能だからです。

従ってこのキーワードは、

tcp_wrappers=NO

と設定しておきましょう。

"use_localtime"〜ローカル時刻で表示する

vsFTPd デフォルト では GMT でファイル一覧を表示します。

GMTに対して日本の時差は+9時間です。

実のところ、 WBEL CentOS で扱われるファイルやディレクトリの タイムスタンプ はGMTで管理されているわけですが、実際に操作を行うときはこのGMTに対してタイムゾーン設定 CentOS5インストール時のタイムゾーンの設定 で指定した地域の時差が計算されて表示されています。

これは想像ですが、どうしてvsFTPdがデフォルトでローカル時間を扱わないのかというと、多分「世界中の人がアクセスする FTPサーバー としても利用OKですよ」と、製作者が暗にアピールしたかったからではないでしょうか。考えすぎでしょうか。

従って、タイムゾーンを「日本」に設定している場合、デフォルトのvsFTPdに接続して表示されるタイムスタンプは、 構築中のLinuxサーバー CUI GUI のファイルシステムで表示されるタイムスタンプと9時間ずれてしまうことになります。

つまり、CUIやGUIの操作で作成、修正したファイルを FTPクライアント ダウンロード したり、逆にFTPクライアントから アップロード したファイルをCUIやGUIで操作したりすると、9時間前、あるいは9時間後のファイルを扱うことになってしまい、タイムスタンプの違いを判別して動作するコマンドや アプリケーション を扱うときに不都合が起こることになります。

こういう不都合を無くすためには、"/etc/vsftpd/vsftpd.conf"に、

use_localtime=YES

と追加記述してください。

このページの先頭へ↑

旧バージョンのvsFTPdからの環境を移す(CentOS5)

vsFTPd では、動作制御を行う設定ファイル "/etc/vsftpd/vsftpd.conf" の他に、ユーザーごとの接続の可否や参照可能なディレクトリの制限を行うためにいくつかの ユーザーリストファイル を設置し、これを併用するようになっています。

その詳細については、WBEL3、CentOS3、WBEL4、CentOS4では こちら ローカルユーザー接続の設定(WBEL3,4_CentOS3,4) で、CentOS5では ローカルユーザー接続の設定(CentOS5) で解説しますが、それぞれで パス とファイル名が異なっています。

WBEL3,CentOS3,WBEL4,CentOS4 CentOS5
/etc/vsftpd.ftpusers /etc/vsftpd/ftpusers
/etc/vsftpd.user_list /etc/vsftpd/userlist
/etc/vsftpd.chroot_list /etc/vsftpd/chroot_list

OSごとのユーザーリストファイル(vsFTPd)

つまり、それまで "/etc/" 以下に直接置かれていたユーザーリストファイルが、CentOS5からは "/etc/vsftpd/" 以下にまとめて格納されるようになり、それに伴ってファイル名から "vsftpd." が省略されるようになったわけです。

ところでCentOS5は、古いバージョンのCentOSが インストール されているシステムを、CentOS5のインストール CD などを使ってアップデートすることができます。

このとき、
"/etc/vsftpd/vsftpd.conf"に記述されているユーザーリストファイルの指定も適切に書き換えられるようになっています。

このアップデートの際には "/etc/vsftpd/vsftpd_conf_migrate.sh" という シェル スクリプト が実行され、CentOS4以前のユーザーリストファイルの内容が自動的にCentOS5の デフォルト のユーザーリストファイルにコピーされるようになっています。

一方で新しい サーバー機 にCentOS5をインストールし、古いサーバー機上で動いているCentOS3やCentOS4の環境をコピーするような場合、vsFTPdのユーザーリストファイルをそのままCentOS5のファイルシステムにコピーしても、お解りのとおりそのままでは設定に反映されないことになります。

こういう場合はユーザーリストファイルの内容を手作業で書き換えるか、 "/etc/vsftpd/vsftpd_conf_migrate.sh" を手動で実行しなければらならない点に注意してください。

このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System