Very Secure FTP Daemon (vsftpd) は、Linux 向けの軽量な FTP サーバーです。本トピックでは、Linux ベースの Simple Application Server への vsftpd のインストールおよび構成手順を説明し、FileZilla を使用して接続を検証します。
FTP は認証情報も含むすべてのデータをプレーンテキストで送信します。暗号化を必要とする本番環境向けワークロードには、代わりに SFTP または FTPS をご検討ください。本ガイドでは、FTP が明示的に要件となるユースケースにおける vsftpd の利用方法を解説します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
Linux ベースの Simple Application Server。詳細については、「シンプルアプリケーションサーバーの作成」をご参照ください。
サーバーのパスワードが設定済みであること。詳細については、「サーバーのパスワードの設定または再設定」をご参照ください。
ローカルマシンに FileZilla がインストール済みであること。ダウンロードは filezilla-project.org から行ってください。
FTP 接続および認証モード
FTP は、以下の 2 種類の接続モードで動作します。
アクティブモード:クライアントが自身のポート情報をサーバーに送信し、サーバーがデータ接続を開始します。
パッシブモード:サーバーがポートを開き、そのポート情報をクライアントに送信した後、クライアントが接続を開始します。本ガイドでは、ファイアウォールおよび NAT を通過しやすいパッシブモードを構成します。
FTP は、以下の 3 種類の認証モードをサポートします。
| モード | セキュリティ | 説明 |
|---|---|---|
| 匿名ユーザー モード | 最低 | ユーザー名およびパスワードは不要です。公開ファイル転送のみに適しています。本番環境では使用しないでください。 |
| ローカルユーザー モード | 中 | Linux のローカルユーザーによる認証を行います。本ガイドで解説します。 |
| 仮想ユーザー モード | 最高 | システムから分離された仮想ユーザーを使用します。専門的な構成が必要です。 |
本ガイドでは、推奨されるローカルユーザー モードおよび匿名ユーザー モードについて解説します。
手順 1:vsftpd のインストール
Linux サーバーへの接続を行います。
vsftpd が既にインストールされているかどうかを確認します。アプリケーションイメージでデプロイされた一部のサーバーには、vsftpd がプリインストール済みの場合があります。再インストールすると競合が発生する可能性があるため、注意してください。
vsftpd -v出力にバージョン番号が表示された場合、vsftpd は既にインストールされています。
vsftpd: version 3.0.2vsftpd が既にインストールされている場合は、アプリケーションイメージのドキュメントから FTP 認証情報を取得し、手順 3:ファイアウォールのポート開放へスキップしてください。
vsftpd のインストールを行います。本例では CentOS 7 を使用します。他の Linux ディストリビューションについては、「ECS インスタンスでの FTP サイト構築」をご参照ください。
sudo yum install -y vsftpd成功メッセージが表示されれば、インストールが完了しています。
vsftpd を起動時に自動実行するように有効化します。
sudo systemctl enable vsftpd.servicevsftpd を起動します。
sudo systemctl start vsftpd.service説明サービスの起動に失敗し、「
Job for vsftpd.service failed because the control process exited with error code」というエラーが表示された場合、ポート 21 がすでに使用中である可能性があります。lsof -i:21を実行して該当プロセスを特定し、その後kill -9 <PID>を実行してプロセスを停止したうえで、vsftpd を再起動してください。vsftpd が実行中であることを確認します。
sudo netstat -antup | grep ftp出力に FTP サービスポートが表示された場合、vsftpd は正常に実行中です。
手順 2:アクセスモードの構成
以下のモードのいずれかを選択してください。セキュリティ面を考慮し、ローカルユーザー モードを推奨します。
ローカルユーザー モード(推奨)
FTP アクセス用に専用の Linux ユーザーを作成します。本例では
ftptestを使用します。sudo adduser ftptestユーザーのパスワードを設定します。
sudo passwd ftptestプロンプトに従って、パスワードの入力および確認を行ってください。
FTP ディレクトリを作成します。
sudo mkdir /var/ftp/testディレクトリの所有権を
ftptestに割り当てます。sudo chown -R ftptest:ftptest /var/ftp/test編集前に vsftpd 構成ファイルのバックアップを作成します。
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak構成ファイルを編集するために開きます。
説明apt install vsftpdで vsftpd をインストールした場合、構成ファイルのパスは/etc/vsftpd.confになります。sudo vim /etc/vsftpd/vsftpd.confiを押して編集モードに入ります。以下のパラメーターを更新します。これらの行が
#でコメントアウトされていないこと、および末尾に余分なスペースがないことを確認してください。余分なスペースがあると、vsftpd の再起動時にエラーが発生します。/etc/vsftpd/vsftpd.conf# 匿名ログインを無効化 anonymous_enable=NO # ローカルユーザーのログインを許可 local_enable=YES # IPv4 でリッスン listen=YESIPv6 リスナーをコメントアウトするには、行頭に
#を追加します。#listen_ipv6=YESファイル末尾に以下のパラメーターを追加します。ただし、
39.105.xx.xxはご利用のサーバーのパブリック IP アドレスに置き換えてください。/etc/vsftpd/vsftpd.conf# ログイン後のローカルユーザーのホームディレクトリを設定 local_root=/var/ftp/test # ユーザーをホームディレクトリに制限 chroot_local_user=YES # chroot 制限から除外するユーザーの一覧を有効化 chroot_list_enable=YES # 除外リストファイルのパス chroot_list_file=/etc/vsftpd/chroot_list # パッシブモードを有効化 pasv_enable=YES allow_writeable_chroot=YES # サーバーのパブリック IP アドレス pasv_address=39.105.xx.xx # パッシブモードのポート範囲(高番号ポートを指定することでリスクを低減) pasv_min_port=50000 pasv_max_port=50010Escキーを押し、次に:wqを入力してEnterキーを押すと、保存して終了します。chroot 除外リストファイルを作成します。このファイルに記載されたユーザーはホームディレクトリに制限されません。空であっても、このファイルは必須です。
sudo vim /etc/vsftpd/chroot_listiを押して編集モードに入ります。除外対象のユーザー名を 1 行につき 1 つずつ記述します(除外が必要ない場合は、ファイルを空のままにしてください)。Escキーを押し、次に:wqを入力してEnterキーを押すと、保存して終了します。システムファイアウォールを停止します。vsftpd のポートアクセス管理は、手順 3 で構成する Simple Application Server のファイアウォールで行います。
sudo systemctl stop firewalldSSH 構成でパスワード認証を有効化します。
sudo vi /etc/ssh/sshd_configファイル末尾にある
PasswordAuthenticationを探して、値をyesに設定します。Escキーを押し、次に:wq!を入力してEnterキーを押すと、保存して終了します。変更を適用するために vsftpd を再起動します。
sudo systemctl restart vsftpd.service
匿名ユーザー モード
匿名モードでは、パスワードなしで誰でも接続できます。非本番環境での公開ファイル転送にのみ使用してください。
vsftpd 構成ファイルを開きます。
説明apt install vsftpdで vsftpd をインストールした場合、構成ファイルのパスは/etc/vsftpd.confになります。sudo vim /etc/vsftpd/vsftpd.confiを押して編集モードに入ります。以下のパラメーターを設定します。Linux ディストリビューションによってデフォルト値が異なる場合があります。編集後に両方の値が
YESになっていることを確認してください。これらの行が#でコメントアウトされていないこと、および末尾に余分なスペースがないことを確認してください。/etc/vsftpd/vsftpd.confanonymous_enable=YES anon_upload_enable=YES listen=YES listen_ipv6=NOファイル末尾に以下のパラメーターを追加します。ただし、
39.105.xx.xxはご利用のサーバーのパブリック IP アドレスに置き換えてください。/etc/vsftpd/vsftpd.conf# パッシブモードを有効化 pasv_enable=YES # パッシブモードのポート範囲 pasv_min_port=50000 pasv_max_port=50010 # サーバーのパブリック IP アドレス pasv_address=39.105.xx.xxEscキーを押し、次に:wqを入力してEnterキーを押すと、保存して終了します。デフォルトの FTP ディレクトリ (
/var/ftp/pub) に書き込み権限を付与します。sudo chmod o+w /var/ftp/pub/vsftpd を再起動します。
sudo systemctl restart vsftpd.service
手順 3:ファイアウォールのポート開放
Simple Application Server のファイアウォールにインバウンドルールを追加し、FTP トラフィックを許可します。パッシブモードでは、ポート 21 およびパッシブポート範囲が必要です。「ファイアウォールの管理」をご参照ください。
| アプリケーションタイプ | プロトコル | ポート範囲 |
|---|---|---|
| FTP | TCP | 21 |
| カスタム | TCP | pasv_min_port–pasv_max_port(例:50000/50010) |
ルールを追加した後、それらは ファイアウォール ページに表示されます。

手順 4:FTP 接続の検証
FileZilla を使用して、FTP サーバーへのアクセスが可能であることを確認します。
本例では FileZilla 3.64.0 を使用します。他のバージョンでは、インターフェイスが異なる場合があります。
FileZilla を起動します。
ファイル > サイトマネージャー に移動します。
新規サイト (N) をクリックします(サイトマネージャー ダイアログの左下隅)。
新規サイトの名前を入力し、接続を構成します。

パラメーター 値 名前 任意のサイト名。例: test-01。プロトコル FTP ホスト サーバーのパブリック IP アドレス(例: 121.43.XX.XX)ポート 21 ログオンタイプ 匿名(匿名モード)または通常(ローカルユーザー モード) ローカルユーザー モードの場合は、ログオンタイプ を 通常 に設定し、FTP のユーザー名およびパスワードを入力します。
接続 をクリックします。
接続後、FileZilla を使用してファイルのアップロード、ダウンロード、削除が可能です。インターフェイスは以下の 4 つのセクションに分割されています。

| セクション | 説明 |
|---|---|
| ① | 接続ステータス、コマンド、タスク結果 |
| ② | ローカルマシン:ディレクトリおよびファイル一覧 |
| ③ | リモートサーバー:FTP ディレクトリ一覧。匿名モードでは、デフォルトのディレクトリは /pub です。 |
| ④ | 転送キューおよびタスクログ |
vsftpd 構成リファレンス
/etc/vsftpd ディレクトリには、以下の 3 つの主要なファイルが含まれています。
/etc/vsftpd/vsftpd.conf:メインの構成ファイル/etc/vsftpd/ftpusers:このファイルに記載されたユーザーは FTP アクセスが拒否されます(ブラックリスト)/etc/vsftpd/user_list:このファイルに記載されたユーザーは FTP アクセスが許可されます(ホワイトリスト)
ログイン制御パラメーター
| パラメーター | 説明 |
|---|---|
anonymous_enable=YES | 匿名ユーザーの受け入れ |
no_anon_password=YES | 匿名ユーザーに対するパスワード入力プロンプトをスキップ |
anon_root= | 匿名ユーザーのホームディレクトリ |
local_enable=YES | ローカルユーザーの受け入れ |
local_root= | ローカルユーザーのホームディレクトリ |
権限パラメーター
| パラメーター | 説明 |
|---|---|
write_enable=YES | すべてのユーザーによるファイルアップロードを許可 |
local_umask=022 | ローカルユーザーによるアップロード時のファイル権限マスク |
file_open_mode=0666 | アップロードされたファイルの権限に umask を適用 |
anon_upload_enable=NO | 匿名ユーザーによるファイルアップロードを許可 |
anon_mkdir_write_enable=NO | 匿名ユーザーによるディレクトリ作成を許可 |
anon_other_write_enable=NO | 匿名ユーザーによるファイルの変更または削除を許可 |
chown_username=lightwiter | 匿名ユーザーがアップロードしたファイルに割り当てる所有者 |