RockyLinuxのFTPサーバー(vsftpd)の構築手順

最終更新日

Webサーバーやインターネット上のサーバーに対して、ファイル転送するためのFTPサーバーの構築について解説。今回は、RockyLinuxにvsftpdアプリケーションをインストールします。

最近ではFTPサーバーは、セキュリティ面で脆弱なのでsftpやssh等でファイル転送する場合が多いのですが、2024年代でもftpサーバーを使用するプロジェクトがあったのが驚きです。だいぶ昔に構築したことがあるのですが、忘れてしまったので備忘録的に残しておこうと思います。

対象:CentOS、RockyLinux、AlmaLinux

特徴

vsftpdは高機能ではなりませんが、軽量で高速に動作します。ユーザー権限でプロセスが呼び出されるためわりとセキュアです。設計や保守も容易です。

環境

$ cat /etc/redhat-release
Rocky Linux release 8.6 (Green Obsidian)

構築手順

yumでvsftpdをインストール

sudo yum -y install vsftpd 

実行結果

[rin@centos ~]$ sudo yum -y install vsftpd
メタデータの期限切れの最終確認: 3:06:30 時間前の 2024年06月16日 11時31分12秒 に実施しました。
パッケージ vsftpd-3.0.3-35.el8.x86_64 は既にインストールされています。
依存関係が解決しました。
=======================================================================================================================================
 パッケージ                   アーキテクチャー             バージョン                            リポジトリー                    サイズ
=======================================================================================================================================
アップグレード:
 vsftpd                       x86_64                       3.0.3-36.el8                          appstream                       180 k

トランザクションの概要
=======================================================================================================================================
アップグレード  1 パッケージ

ダウンロードサイズの合計: 180 k
パッケージのダウンロード:
vsftpd-3.0.3-36.el8.x86_64.rpm                                                                         1.0 MB/s | 180 kB     00:00    
---------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                   270 kB/s | 180 kB     00:00     
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                               1/1 
  scriptletの実行中: vsftpd-3.0.3-36.el8.x86_64                                                                                    1/1 
  アップグレード中 : vsftpd-3.0.3-36.el8.x86_64                                                                                    1/2 
  scriptletの実行中: vsftpd-3.0.3-36.el8.x86_64                                                                                    1/2 
  scriptletの実行中: vsftpd-3.0.3-35.el8.x86_64                                                                                    2/2 
  整理             : vsftpd-3.0.3-35.el8.x86_64                                                                                    2/2 
  scriptletの実行中: vsftpd-3.0.3-35.el8.x86_64                                                                                    2/2 
  検証             : vsftpd-3.0.3-36.el8.x86_64                                                                                    1/2 
  検証             : vsftpd-3.0.3-35.el8.x86_64                                                                                    2/2 

アップグレード済み:
  vsftpd-3.0.3-36.el8.x86_64                                                                                                           

完了しました!
[rin@centos ~]$ 

設定ファイル

  • /etc/vsftpd/vsftpd.conf:設定ファイル
  • /etc/vsftpd/vsftpd.chroot_list:chroot許可ユーザーリスト
  • /etc/vsftpd/vsftpd.user_list:禁止ユーザーリスト
  • /etc/vsftpd/vsftpd.ftpusers:すべてにおいて優先に禁止される

基本設定

/etc/vsftpd/vsftpd.conf

$sudo vi /etc/vsftpd/vsftpd.conf
#anonymousユーザ(匿名ユーザ)のログイン禁止
anonymous_enable=NO

#ローカルユーザーのアクセス許可
local_enable=YES

#書き込み許可
write_enable=YES

#ローカルユーザのumask設定
#以下の通り初期値は「022」、アップロードしたファイル権限は777から022を引いた755となる。
local_umask=022

#anonymousでアップロードするための設定。通常はコメントアウト
#anon_upload_enable=YES

#anonymousユーザが新規にディレクトリを作成できる設定。通常はコメントアウト
#anon_mkdir_write_enable=YES

#ディレクトリメッセージの設定
#YESにした場合、ディレクトリ毎にメッセージファイル(デフォルトのファイル名: .message) 
#を置いておくと、そのディレクトリ一覧を表示するときに当該メッセージをコマンドのレスポンスとして表示
#できます。
dirmessage_enable=YES

#/var/log/vsftpd.logに接続・転送を記録
xferlog_enable=YES

#Activeモード時のデータコネクションポートの設定
connect_from_port_20=YES

#chown_uploads=YES
#chown_username=whoever

#/var/log/vsftpd.logに接続・転送を記録
xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES
#idle_session_timeout=600
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES

#asciiモードでアップロードを許可します。
ascii_upload_enable=YES
#asciiモードでダウンロードを許可します。
ascii_download_enable=YES

#FTPログイン時にソフト名とバージョンが表示されないようにする
ftpd_banner=Welcome to blah FTP service.

#デフォルトでホームディレクトリより上層へのアクセスを禁止する
chroot_local_user=YES

#ホームディレクトリより上層へのアクセスを許可するユーザのリストの有効化
chroot_list_enable=YES

#ホームディレクトリより上層へのアクセスを許可するユーザのリスト
chroot_list_file=/etc/vsftpd.chroot_list

#ディレクトリごと削除できるようにする。削除できないようにする場合は、NOかコメントアウトします。
ls_recurse_enable=YES

#IPv4 のみをリスンする場合は YES
listen=NO

#IPv6 はリスンしない場合は NO
listen_ipv6=YES

#PAM認証の設定
#PAMサービスで使用するサービスの名前を指定する。 RPM から入れたなら vsftpd になっており、
#/etc/pam.d 配下に vsftpd ファイルがインストールされているので、
#特に変更は不要。
pam_service_name=vsftpd
#ユーザ制限の設定
userlist_enable=YES

パッシブモードでの転送を許可する場合は、以下の設定を追加

pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60030

SELinuxを有効にしている場合

ブール値を変更します。

$setsebool -P ftpd_full_access on

Firewalldを有効にしている場合

FTPサービスの許可をします。

$firewall-cmd --add-service=ftp
$firewall-cmd --runtime-to-permanent

FTPユーザーと管理者の追加

FTPユーザーの追加

$ sudo useradd ftpuser
$ sudo passwd ftpuser

FTP管理者の追加

$ sudo useradd ftpadmin
$ sudo passwd ftpadmin

chrootしないユーザーリスト作成

ホームディレクトリより上層へのアクセスを許可するユーザーリストを作成します。

$sudo vi /etc/vsftpd/chroot_list
ftpadmin

サービス再起動

$ sudo systemctl restart vsftpd
$ sudo systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2024-06-16 19:27:48 JST; 3s ago
  Process: 52405 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 52406 (vsftpd)
    Tasks: 1 (limit: 10822)
   Memory: 588.0K
   CGroup: /system.slice/vsftpd.service
           └─52406 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 6月 16 19:27:48 centos systemd[1]: vsftpd.service: Succeeded.
 6月 16 19:27:48 centos systemd[1]: Stopped Vsftpd ftp daemon.
 6月 16 19:27:48 centos systemd[1]: Starting Vsftpd ftp daemon...
 6月 16 19:27:48 centos systemd[1]: Started Vsftpd ftp daemon.

FTPクライアントから接続テスト

Windowsの標準FTPコマンドで動作試験します。

デスクトップの左下にあるWindowsマークを右クリックします。

Windowsマーク

メニューの中から「ファイル名を指定して実行」をクリックします。

Windowsメニュー
ファイル名を指定して実行

DOSプロンプトが表示されますので、ftpコマンドを実行します。

ftp ipアドレス or ホスト名

ユーザー名とパスワードを入力してログインします。

DOSプロンプト

putコマンドでファイルを送信してみます。

put ファイルパス
put ファイルパス アップロードパス
putコマンド実行

Dirコマンドでファイルがアップロードされたか確認

dir
dirコマンド実行

vsftpd 設定ファイルの解説

anon_mkdir_write_enable

YES に設定した場合、anonymous(匿名)ユーザはある条件の下でディレクトリ を新規に作成することが許可される。 実際に機能させるには write_enable オプションが有効になっていなければならず、また anonymous ftp ユーザが 親ディレクトリに対する書き込み権限を持っている必要がある。

デフォルト: NO

anon_other_write_enable

YES に設定した場合、anonymous ユーザに ファイルのアップロードとディレクトリの作成以外の書き込み操作、 すなわち削除と名前の変更を許可する。 一般的には推奨されないが、オプションの完全性のために含まれている。

デフォルト: NO

anon_upload_enable

YES に設定した場合、ある条件の下で anonymous ユーザに ファイルのアップロードを許可する。 実際に機能させるには、 write_enable オプションを有効にしなければならず、また anonymous ftp ユーザが 親ディレクトリに対する書き込み権限を持っている必要がある。

デフォルト: NO

anon_world_readable_only

YES に設定した場合、 anonymous ユーザには誰でも読み込み可になっているファイルの ダウンロードのみを許可する。 これは、ftp ユーザがファイルを 所有できることを (特にアップロードされたファイルがある場合に) 認めている。

デフォルト: YES

anonymous_enable

anonymous ログインを許可するかどうかを制御する。 YES にした場合、ユーザー名 ftp と anonymous の両方を anonoymous ログインとして認識する。

デフォルト: YES

ascii_download_enable

YES に設定した場合、 ダウンロード時の ASCII モードでのデータ転送を許可する。

デフォルト: NO

ascii_upload_enable

YES に設定した場合、 アップロード時の ASCII モードでのデータ転送を許可する。

デフォルト: NO

async_abor_enable

YES に設定した場合、特殊な FTP コマンド “非同期 ABOR” を許可する。 この機能を使用するのは、分別のない FTP クライアントだけである。 さらに、この機能は取り扱いが難しいので、デフォルトで無効にされている。 この機能を有効にしなかった場合には、 転送を中止したときに不幸にも固まる FTP クライアントがあるので、 これを有効にしたくなるかもしれない。

デフォルト: NO

background

YES に設定し、vsftpd が “listen” モードで起動された場合、 リスナープロセスをバックグラウンドにする。 すなわち、vsftpd を起動したシェルにすぐに制御が戻る。

デフォルト: NO

check_shell注意! このオプションは PAM 対応ではない vsftpd でのみ意味を持つ。 NO に設定した場合、ローカルユーザのログイン時の、 シェルが有効であるかどうかの /etc/shells チェックをしない。

デフォルト: YES

chmod_enable

YES に設定した場合、SITE CHMOD コマンドを許可する。 注意! これはローカルユーザにのみ適用される。 anonymous ユーザは、決して SITE CHMOD を使用できない。

デフォルト: YES

chown_uploads

YES に設定した場合、anonymous でアップロードされたファイルの所有者を chown_username で設定したユーザにする。 管理上、そして多分セキュリティの観点から便利である。

デフォルト: NO

chroot_list_enable

YES に設定した場合、ログイン後にホームディレクトリへと chroot() されるローカルユーザのリストを指定できる。 chroot_local_user を YES に設定した場合には、意味が異なってくる。 リストはその場合、chroot() jail へと移動されないユーザ のリストとなる。 デフォルトでは、このリストは /etc/vsftpd.chroot_list ファイルであるが、 chroot_list_file 設定によってこれを変更することができる。

デフォルト: NO

chroot_local_user

YES に設定した場合、ローカルユーザは(デフォルトで)ログイン後に ホームディレクトリへと chroot() される。 警告: このオプションはセキュリティに密接に関連する。 ユーザがアップロード権限を持っていたり、シェルでのアクセスができる場合は 特にである。 何をしているかを理解している場合にのみ有効にすること。 これらのセキュリティの問題は vsftpd に特有の問題ではないことに 注意してほしい。 ローカルユーザを chroot() jail に入れることができるすべての FTP デーモンにおいて、この問題がある。

デフォルト: NO

connect_from_port_20

PORT でのデータ接続において、サーバが(送信元)ポートに 20(ftp-data) を使うかどうか制御する。 セキュリティ上の理由から、いくつかのクライアントはポート 20 を要求する。 逆に言えば、このオプションを無効にすることで、わずかではあるが vsftpd をより少ない特権で動作させることができる。

デフォルト: NO (ただし、サンプルの設定ファイルでは有効になっている)deny_email_enableYES に設定した場合、anonymous ユーザのパスワード(e-mail アドレス)のうち、 ログインを拒否したいもののリストを設定できる。 デフォルトでは、このリストは /etc/vsftpd.banned_emails ファイルであるが、 banned_email_file 設定によってこれを変更することができる。

デフォルト: NO

dirlist_enable

NO に設定した場合、すべてのディレクトリ表示コマンドは、 アクセス拒否 (permission denied) になる。

デフォルト: YES

dirmessage_enable

YES に設定した場合、FTP サーバ上のユーザが 新たなディレクトリに初めて入ったときに、メッセージを見せることができる。 デフォルトでは、ディレクトリの .message というファイルが調べられるが、 message_file 設定によってこれを変更することができる。

デフォルト: NO

(ただし、サンプルの設定ファイルでは有効になっている)

download_enable

NO に設定した場合、すべてのダウンロード要求はアクセス拒否になる。

デフォルト: YES

dual_log_enable

YES に設定した場合、デフォルトで /var/log/xferlog と /var/log/vsftpd.log という二つのログファイルを同時に生成する。 前者は wu-ftpd 形式の転送ログで、標準的なツールによって解析することができる。 後者は vsftpd 独自形式のログである。

デフォルト: NO

force_dot_files

YES に設定した場合、クライアントが “a” フラグを使用していなくても、 ドット (.) で始まるファイルとディレクトリも、ディレクトリリストに表示する。

デフォルト: NO

guest_enable

YES に設定した場合、anonymous でないログインすべてを “guest” にクラス分けする。 guest ログインは、 guest_username 設定で指定したユーザにマッピングする。

デフォルト: NO

hide_ids

YES に設定した場合、ディレクトリリストでのユーザ・グループの情報を “ftp” と表示する。

デフォルト: NO

listenYES に設定した場合、スタンドアロンモードで起動する。 これは inetd などのスーパーサーバから起動してはいけないということを意味する。 その代わりに、vsftpd プログラムを一度だけ直接実行すればよい。 vsftpd 自身が、入ってくる接続を待ち、処理する面倒をみる。

デフォルト: NO

listen_ipv6IPv4 ソケットの代わりに IPv6 ソケットを待ち受ける点を除けば、 listen オプションと同じである。 このオプションと listen オプションは、 どちらか一方しか指定することができない。

デフォルト: NO

local_enableローカルユーザのログインを許可するかどうかを制御する。 YES に設定した場合、/etc/passwd にある普通のユーザアカウントを ログインに使う。

デフォルト: NO

log_ftp_protocol

YES に設定した場合、FTP のすべての要求と応答を記録し、 xferlog_std_format オプションを無効にする。 デバッグに便利である。

デフォルト: NO

ls_recurse_enableYES に設定した場合、”ls -R” の使用を許可するようになる。 大きなサイトの一番上のレベルで ls -R を実行されると、 多くの資源を消費してしまうので、 これはセキュリティ上のちょっとしたリスクである。

デフォルト: NO

no_anon_passwordYES に設定した場合、anonymous のパスワードを尋ねるのを止める。 すなわち、anonymous ユーザーはパスワード無しでログインする。

デフォルト: NO

one_process_modelもし Linux 2.4 カーネルを使用しているならば、 一つの接続に一つのプロセスを使用するという、 異なったセキュリティモデルを使用することができる。 これは純粋なセキュリティモデルから少し外れるが、 性能を得ることができる。 自サイトで非常に多いユーザの同時接続をサポートし、 自分が何をしているか知っている人だけが、このオプションを有効にしたくなる。

デフォルト: NO

passwd_chroot_enablechroot_local_user と共に YES に設定した場合、 chroot() jail の場所はユーザごとになる。 jail は /etc/passwd にある各人のホームディレクトリから得られる。 ホームディレクトリを表わす文字列に /./ があれば、そのパスの場所が jail になる。

デフォルト: NO

pasv_enableNO に設定した場合、データ接続の開始において PASV を許可しない。

デフォルト: YES

pasv_promiscuousYES に設定した場合、 PASV セキュリティーチェックを無効にし、 制御用の接続と異なる IP アドレスからのデータ接続を許可する。 何をしているかを理解している場合にのみ有効にすること。 唯一の道理にかなった利用法は、安全なトンネルの中で使うか、 そうでなければ、おそらくは FXP(訳注: リモートホスト間転送) を容易にするためのものである。

デフォルト: NO

port_enableNO に設定した場合、データ接続の開始において PORT を許可しない。

デフォルト: YES

port_promiscuousYES に設定した場合、 PORT セキュリティーチェックを無効にし、 制御用の接続と異なる IP アドレスへのデータ接続を許可する。 何をしているかを理解している場合にのみ有効にすること。

デフォルト: NO

secure_email_list_enable

匿名ログインで許可する e-mail パスワードのリストを 指定したい場合にだけ YES に設定すること。 仮想的なユーザーを必要とせずに、 低セキュリティなコンテンツへのアクセスを制限する、 面倒の少ないやり方として便利である。 YES に設定した場合には、 email_password_file で指定されるファイルに書かれているパスワードが与えられない限り、 匿名ログインを許可しない。 このファイルのフォーマットは 1 行に 1 パスワードで、 余分な空白があってはいけない。 デフォルトのファイル名は /etc/vsftpd.email_passwords である。

デフォルト: NO

session_support

vsftpd がログインセッションを維持しようとするかどうかを制御する。 vsftpd がセッションを維持する場合、utmp と wtmp を更新しようと試みる。 認証に PAM を使用している場合には、さらに pam_session を open し、 ログアウト時に close する。 セッションのログ取得が必要なく、vsftpd をより少ない処理で動作させ、 かつ(または)より少ない権限で動作させたいならば、 これを NO に設定することができる。 注 – utmp と wtmp のサポートは PAM を有効にしてビルドした場合に限られる。

デフォルト: YES

setproctitle_enable

有効にした場合、システムのプロセスリスト(例えば ps aux コマンド)に セッションの状態に関する情報を表示する。 つまり、表示されるプロセス名が vsftpd のセッションがどうなっているか (idle, downloading など)に応じて変化する。 セキュリティ上、これを off のままにしておきたいと思うのが普通である。

デフォルト: NO

syslog_enable

YES に設定した場合、/var/log/vsftpd.log に 行くはずだったすべてのログ出力を、 代わりにシステムログに出力する。 FTPD ファシリティでログ出力をする。

デフォルト: NO

tcp_wrappers

有効にした場合、 vsftpd を tcp_wrappers をサポートしてコンパイルしてあれば、 外から来る接続は tcp_wrappers のアクセス制御が適用される。 さらに IP ごとの設定のための仕組みがある。 tcp_wrappers で環境変数 VSFTPD_LOAD_CONF をセットした場合 (訳注: /etc/hosts.allow で指定することが可能)、 その環境変数で指定したファイルを vsftpd の設定ファイルとして読み込む。

デフォルト: NO

text_userdb_names

ディレクトリリストを表示した場合、 デフォルトではユーザとグループのフィールドが ID の数値で表示される。 このオプションを YES にすれば、名前を示す文字列になる。 性能上の理由から、デフォルトは NO である。

デフォルト: NO

use_localtime

有効にした場合、ディレクトリリストの表示にローカルのタイムゾーンを使用する。 デフォルトは GMT での表示である。 FTP の MDTM コマンドが返す時刻もこのオプションの影響を受ける。

デフォルト: NO

use_sendfile

使用しているプラットフォーム上で sendfile() システムコールを 使う場合の相対的効果を確認するための、内部的な設定。

デフォルト: YES

userlist_deny

このオプションは userlist_enable が有効な場合にのみ意味を持つ。 NO にした場合、 userlist_file で指定したファイルに明示的にリストされたユーザ以外は ログインが拒否される。 ログインを拒否する場合、ユーザにパスワードを尋ねる前に拒否をする。

デフォルト: YES

userlist_enable

有効にした場合、 userlist_file で指定したファイルをユーザ名のリストとして読み込む。 このファイルに名前のあるユーザでのログインしようとすると、 パスワードを尋ねられる前に拒否される。 これは暗号化されていないパスワードが(ネットワーク上を) 転送されてしまうのを防ぐのに効果的である。 userlist_deny も参照のこと。

デフォルト: NO

virtual_use_local_privs

YES に設定した場合、仮想ユーザにローカルユーザと同じ権限を使用する。 デフォルトでは、仮想ユーザは anonymous ユーザと同じ権限を持ち、 それは(特に書き込み権限に関して)より制限されたものになりがちである。

デフォルト: NO

write_enable

ファイルシステムを変更するようなすべての FTP コマンドを 許可するかどうかを制御する。 対象となるコマンドは STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, SITE である。

デフォルト: NO

xferlog_enable

有効にした場合、ログファイルにはアップロードとダウンロードの詳細が記録される。 デフォルトでは、ログファイルは /var/log/vsftpd.log として置かれるが、 vsftpd_log_file の設定によって変更することが可能である。

デフォルト: NO

(ただし、サンプルの設定ファイルでは有効になっている)

xferlog_std_format

有効にした場合、wu-ftpd で使われているような標準的な xferlog フォーマットで 転送ログファイルを作成する。 既存の統計情報を生成するプログラムを再利用できるので、これは便利である。 しかしデフォルトの書式は、より読み易いものである。 この形式のログファイルのデフォルトの場所は /var/log/xferlog であるが、 xferlog_file の設定によって、これを変更することが可能である。

デフォルト: NO

数値オプション

以下は引数に数値をとるオプションである。 数値は非負整数でなければならない。 8 進数は umask オプションで便利なのでサポートされている。 8 進数で指定するには、先頭の数字を 0 にする。accept_timeout

リモートのクライアントが PASV でデータ接続を確立するまでの タイムアウト秒数。

デフォルト: 60

anon_max_rate

anonymous (匿名) クライアントの最大データ転送レート。 秒あたりのバイト数。

デフォルト: 0 (無制限)

anon_umask

anonymous (匿名) ユーザが生成したファイルの umask 値。 注意! 8 進数で指定したければ、先頭の “0” を忘れないように。 そうしないと、指定した値は 10 進数の値として扱われてしまう。

デフォルト: 077

connect_timeout

PORT でのデータ接続において、リモートクライアントが応答するまでの タイムアウト秒数。

デフォルト: 60

data_connection_timeout

データ転送に何ら進捗がない場合に、タイムアウトと見なすまでの秒数。 タイムアウトが発生した場合、リモートクライアントは蹴り出される。

デフォルト: 300

file_open_mode

ファイルがアップロードで作成された場合のファイル・パーミッション。 この値の上に umask がさらに適用される。 実行可能なファイルのアップロードを許可したければ 0777 に変更すればよい。

デフォルト: 0666

ftp_data_port

PORT での接続の場合の、送信元のポート (かっこう悪い名前の connect_from_port_20 が有効である場合のみ)。

デフォルト: 20

idle_session_timeout

制御接続において、FTP コマンドが何もない場合に タイムアウトと見なすまでの秒数。 タイムアウトが発生した場合、リモートクライアントは蹴り出される。

デフォルト: 300

listen_port

スタンドアロンモードの場合の、 FTP 接続を待ち受けるポート番号。

デフォルト: 21

local_max_rate

ローカルユーザの最大データ転送レート。 秒あたりのバイト数。

デフォルト: 0 (無制限)

local_umask

ローカルユーザが生成したファイルの umask 値。 注意! 8 進数で指定したければ、先頭の “0” を忘れないように。 そうしないと、指定した値は 10 進数の値として扱われてしまう。

デフォルト: 077

max_clients

スタンドアロンモードの場合に、接続可能なクライアントの最大数を指定する。 最大数を越えて接続したクライアントには、エラーメッセージを渡す。

デフォルト: 0 (無制限)

max_per_ip

スタンドアロンモードの場合に、同じ送信元 IP アドレスからの接続の 最大数を指定する。 この制限を越えて接続したクライアントには、エラーメッセージを渡す。

デフォルト: 0 (無制限)

pasv_max_port

PASV でのデータ接続に割り当てるポートの最大値。 ファイアウォールで指定するポートの範囲を狭めるのに使用できる。

デフォルト: 0 (任意のポートを使用)

pasv_min_port

PASV でのデータ接続に割り当てるポートの最小値。 ファイアウォールで指定するポートの範囲を狭めるのに使用できる。

デフォルト: 0 (任意のポートを使用)

trans_chunk_size

これを変更したいとは思わないだろうが、 しかし、より滑らかな帯域制御をしたければ、 これを 8192 のような値に設定してみること。

デフォルト: 0 (vsftpd がふさわしい値を選ぶ)

文字列オプション

以下は引数に文字列をとるオプションである。

anon_root

このオプションは、anonymous (匿名) ログイン後に変更する ディレクトリ名を表す。 ディレクトリ変更の失敗は、静かに無視する。

デフォルト: (なし)

banned_email_file

anonymous ユーザのパスワード (e-mail アドレス) のうち、 許可しないもののリストのファイル名を指定する。 オプション deny_email_enable が有効の場合にのみ、このファイルは参照される。

デフォルト: /etc/vsftpd.banned_emails

banner_file

誰かがサーバに接続したときに表示するテキストを格納するファイル名 を指定する。 このオプションが設定された場合、 ftpd_banner で指定される文字列よりも優先される。

デフォルト: (なし)

chown_username

anonymous (匿名) でアップロードされたファイルの所有者となる ユーザのユーザ名を指定する。 このオプションは、関連するもう一つのオプション chown_uploads が有効な場合にのみ意味を持つ。

デフォルト: root

chroot_list_file

ホームディレクトリ内の choot() jail に入れられる ローカルユーザのリストを示すファイル名を指定する。 このオプションは、 chroot_list_enable が有効な場合にのみ意味を持つ。もし chroot_local_user が有効であれば、このリストは chroot() jail に入れられ*ない* ユーザのリストになる。

デフォルト: /etc/vsftpd.chroot_list

cmds_allowed

(ログイン後に)許可する FTP コマンドのリストを、コンマで区切って指定する (USER, PASS, QUIT は、ログイン前なら常に許可する)。 指定しなかったコマンドは拒否する。 本当に FTP サーバを閉じ込めるのに強力な手段となる。 例: cmds_allowed=PASV,RETR,QUIT

デフォルト: (なし)

deny_file

すべての手段でアクセスを許可しない、 ファイル名(やディレクトリ名)のパターンを指定する。 この影響をうけるファイル/ディレクトリを隠しはしないが、 それらに対するあらゆる試み (ダウンロード、そのディレクトリへの変更、ディレクトリ内で何か影響するものなど) を拒否する。 このオプションはとても単純なので、本格的なアクセス制御に用いるべきではない。 そのような場合には、まず先にファイルシステムのアクセス制御を用いること。 しかしながら、ある種の仮想ユーザの設定には便利である。

deny_file で指定した文字列を含むか、deny_file で指定した 正規表現にマッチする名前を持つものへのアクセスが拒否される。 vsftpd の正規表現のコードは単純な実装で、完全な正規表現の部分集合 になっているので、注意すること。 よって、このオプションの使用するときは、注意深く、 徹底的にテストする必要がある。 また、あらゆる重要なセキュリティティーポリシーに対し、 ファイルシステムのパーミッションを使用することを、 その偉大な信頼性から推奨する。 例: deny_file={*.mp3,*.mov,.private}

デフォルト: (なし)

email_password_file

secure_email_list_enable を設定したときの代替ファイルを設定する。

デフォルト: /etc/vsftpd.email_passwordsftp_usernameanonymous FTP を取り扱うときに使用するユーザのユーザ名を指定する。 指定したユーザのホームディレクトリが anonymous FTP のルートとして 使用される。

デフォルト: ftp

ftpd_banner

接続が最初に来たときに vsftpd が表示する挨拶メッセージを指定する。

デフォルト: (なし。vsftpd のデフォルトのバナーが表示される)

guest_username

guest ログインの説明については、真偽値設定の guest_enable を参照して欲しい。 このオプションでは、guest ユーザが実際に割り当てられるユーザ名を指定する。

デフォルト: ftp

hide_file

ディレクトリリストから隠すべきファイル名(やディレクトリ名) のパターンを指定する。 ファイル / ディレクトリは隠されているが、 ファイル名を知っているクライアントからは自由にアクセス可能である。 hide_file で指定した文字列を含むか、hide_file で指定した 正規表現にマッチする名前を持つものが隠される。 vsftpd の正規表現のコードは単純な実装で、完全な正規表現の部分集合 になっているので、注意すること。 例: hide_file={*.mp3,.hidden,hide*,h?}

デフォルト: (なし)

listen_address

スタンドアロンモードの場合に、listen するアドレスを指定する。 デフォルトは、すべてのローカルインタフェースである。 IP アドレスを(数値で)指定すること。

デフォルト: (なし)

listen_address6

listen_address と同様だが、(listen_ipv6 が指定された場合に使用される) IPv6 での接続を待つアドレスを指定する。 フォーマットは、標準的な IPv6 アドレスである。

デフォルト: (なし)

local_root

ローカルログイン(すなわち、非 anonymous ログイン)の後に 変更するディレクトリを指定する。 ディレクトリ変更の失敗は、静かに無視する。

デフォルト: (なし)

message_file

ユーザが新たなディレクトリに入った場合に 探すファイルの名前を指定する。 中身がリモートのユーザに表示される。 このオプションは dirmessage_enable オプションが有効の場合にのみ意味を持つ。

デフォルト: .message

nopriv_user

特権を必要としなくなった場合に vsftpd が使用するユーザの ユーザ名を指定する。 注意: nobody を使うのではなく、専用のユーザを使用すべきである。 多くのマシンでは、どちらかと言えば、むしろ多くの重要な事に
 nobody ユーザが使われる。

デフォルト: nobody

pam_service_name

vsftpd が使用する PAM サービス名を指定する。

デフォルト: ftp

pasv_address

PASV コマンドへの応答において、vsftpd が伝える IP アドレスを指定する。 IP アドレスを(数値で)指定すること。

デフォルト: (なし。接続されたソケットからアドレスが決められる)secure_chroot_dirこのオプションは空のディレクトリの名前にすべきである。 また、そのディレクトリは ftp ユーザが書き込めてはいけない。 ここで指定するディレクトリは、 ファイルシステムへのアクセスが必要ないときに使用する、 安全な chroot() jail に使われる。

デフォルト: /usr/share/empty

user_config_dir

この強力なオプションによって、 マニュアルページにあるいかなる設定オプションも ユーザーごとに上書きすることができる。 使い方は簡単で、以下の例で示す。 user_config_dir を /etc/vsftpd_userr_conf に設定し、ユーザ “chris” がログインした場合、 そのセッションの間 /etc/vsftpd_user_conf/chris というファイルにある設定が適用される。 このファイルの書式は、 このマニュアルページにかかれているものと同じである。 ただし、すべての設定がユーザーごとに効果があるわけではないことに 注意してほしい。 例えば、多くの設定はユーザーのセッションが開始される前に使用される。 設定例の中で、ユーザーごとの動作に影響しないものには、 listen_address, banner_file, max_per_ip, max_clients, xferlog_file などが含まれる。

デフォルト: (なし)

user_sub_token

このオプションは、仮想ユーザーと組み合わせるときに便利である。 テンプレートを元に、各仮想ユーザーのホームディレクトリを自動的に生成するのに使用する。 例えば、 guest_username によって実ユーザーのホームディレクトリが /home/virtual/$USER に設定されていて、 user_sub_token が $USER に設定されていれば、仮想ユーザー fred がログインすると、最終的に (通常は chroot() されて) /home/virtual/fred ディレクトリに移動される。 このオプションは、 local_root が user_sub_token を含んでいる場合にも効果がある。

デフォルト: (なし)

userlist_fileuserlist_enable 

オプションが有効な場合に読み込まれるファイルの ファイル名を指定する。

デフォルト: /etc/vsftpd.user_list

vsftpd_log_file

vsftpd スタイルの転送ログを記録するファイルのファイル名を指定する。 xferlog_enable が設定されていて、かつ xferlog_std_format が設定されていない場合にのみ、このログは記録される。 もしくは dual_log_enable オプションを設定すれば記録される。 もう一つさらに複雑なこととして、 syslog_enable を設定した場合にはファイルには出力されず、出力は システムログへと送られる。

デフォルト: /var/log/vsftpd.log

xferlog_file

wu-ftpd スタイルの転送ログを記録するファイルのファイル名を指定する。 転送ログは xferlog_enable と xferlog_std_format が設定されている場合にのみ記録される。 もしくは dual_log_enable オプションを設定すれば記録される。