Very Secure FTP Daemon (vsftpd) は、Linux向けの軽量で安全、そして使いやすいFTPサーバーソフトウェアです。このトピックでは、Linuxベースのシンプルアプリケーションサーバーにvsftpdをインストールおよび構成する方法と、FTPサーバーへの接続をテストする方法について説明します。
前提条件
Linuxベースのシンプルアプリケーションサーバーが作成されていること。詳細については、シンプルアプリケーションサーバーの作成を参照してください。
背景情報
FTPは、ファイル転送に使用されるプロトコルです。FTPはクライアントサーバーモデルアーキテクチャに基づいており、次の動作モードをサポートしています。
アクティブモード: クライアントはポートの情報をFTPサーバーに送信し、サーバーはポートへの接続を確立します。
パッシブモード: FTPサーバーはポートを有効にし、ポート情報をクライアントに送信します。クライアントはポートへの接続を開始し、サーバーは接続を受け入れます。
FTPは、次の認証モードをサポートしています。
匿名ユーザーモード: ユーザーはユーザー名またはパスワードなしでFTPサーバーにログオンできます。これは最も安全性の低い認証モードです。ほとんどの場合、このモードは重要でない公開ファイルの転送に使用されます。本番環境ではこのモードを使用しないことをお勧めします。
ローカルユーザーモード: システムは、ユーザーがローカルLinuxユーザーであるかどうかを確認することでユーザーを認証します。このモードは、匿名ユーザーモードよりも安全です。
仮想ユーザーモード: Linuxシステムは、ユーザーが仮想ユーザーであるかどうかを確認することでユーザーを認証します。仮想ユーザーは、Linuxシステムが提供するFTPサービスへのみアクセスでき、システムの他のリソースにはアクセスできません。仮想ユーザーモードは、匿名ユーザーモードとローカルユーザーモードよりも安全です。サーバーデータのセキュリティ要件が高い場合は、専門家の指導の下で仮想ユーザーモードを構成することをお勧めします。
このトピックでは、構成が容易な匿名ユーザーモードと、より安全なローカルユーザーモードについて説明します。
手順 1: 準備を行う
FileZillaはFTPクライアントツールです。この例では、FileZillaを使用してFTPサーバーへの接続をテストします。次の準備を行う必要があります。
コンピューターにFileZillaをダウンロードしてインストールします。
FileZillaをダウンロードするには、FileZillaにアクセスしてください。
Linuxサーバーのパスワードを設定します。
詳細については、サーバーパスワードの設定またはリセットを参照してください。
手順 2: vsftpdをインストールおよび構成する
このトピックでは、CentOS 7を例として使用します。手順は、オペレーティングシステムによって異なります。詳細については、ECSインスタンスにFTPサイトを構築するを参照してください。
Linuxサーバーに接続します。
詳細については、Linuxサーバーへの接続を参照してください。
次のコマンドを実行して、vsftpdがサーバーにインストールされているかどうかを確認します:
アプリケーションイメージを使用してデプロイされたシンプルアプリケーションサーバーには、vsftpdがプリインストールされている場合があります。vsftpdを再度インストールすると、競合が発生する可能性があります。
vsftpd -v
次の情報が返された場合、vsftpdはシンプルアプリケーションサーバーにインストールされています。vsftpdを再度インストールする必要はありません。関連するアプリケーションイメージのドキュメントを参照して、FTPサーバーのユーザー名とパスワードを取得できます。次に、ファイアウォールを構成し、FTPクライアントを使用してFTPサーバーへの接続をテストできます。詳細については、このトピックの手順 4: Linuxサーバーのファイアウォールを構成するセクションと手順 5: FTPクライアントからFTPサーバーにアクセスできるかどうかを確認するセクションを参照してください。
[admin@iZ2579sxicu**** ~]$ vsftpd -v vsftpd: version 3.0.2
次のコマンドを実行して、vsftpdをインストールします。
sudo yum install -y vsftpd
次のメッセージが表示されたら、vsftpdがインストールされています。
次のコマンドを実行して、FTPサービスがシステム起動時に自動的に起動するようにします。
sudo systemctl enable vsftpd.service
次のコマンドを実行して、FTPサービスを起動します。
sudo systemctl start vsftpd.service
説明FTPサービスを起動できず、システムから
Job for vsftpd.service failed because the control process exited with error code
というエラーメッセージが返された場合は、ポート21が他のサービスによって使用されていないか確認し、問題のトラブルシューティングを行ってください。lsof -i:21
コマンドを実行して、プロセスが存在するかどうかを確認します。プロセスが存在する場合は、
kill -9 <プロセスの番号>
コマンドを実行してプロセスを強制終了します。
次のコマンドを実行して、FTPサービスのポート番号を照会します。
sudo netstat -antup | grep ftp
次の図に示すように、FTPサービスのポート番号を表示できる場合は、FTPサービスが起動しています。
手順 3: FTPサーバーのアクセスモードを構成する
FTPサーバーの匿名ユーザーモードまたはローカルユーザーモードを構成できます。より安全なローカルユーザーモードを使用することをお勧めします。
(推奨) ローカルユーザーモード
次のコマンドを実行して、FTPサービス用のLinuxユーザーを作成します。
この例では、
ftptest
ユーザー名を使用します。sudo adduser ftptest
次のコマンドを実行して、
ftptest
ユーザーのパスワードを変更します。sudo passwd ftptest
コマンドラインの指示に従って、ユーザーのパスワードを変更します。
次のコマンドを実行して、FTPサービス用のファイルディレクトリを作成します。
sudo mkdir /var/ftp/test
次のコマンドを実行して、/var/ftp/testディレクトリの所有者を
ftptest
に変更します。sudo chown -R ftptest:ftptest /var/ftp/test
vsftpd.conf構成ファイルを変更します。
次のコマンドを実行して、/etc/vsftpd/vsftpd.conf構成ファイルを変更します。
vsftpdをインストールするときにapt install vsftpdコマンドを実行した場合、構成ファイルのパスは/etc/vsftpd.confです。
sudo vim /etc/vsftpd/vsftpd.conf
Iキーを押して編集モードに入ります。
FTPサーバーのパッシブモードを有効にします。
次のパラメーターを構成し、他のパラメーターのデフォルト値を保持します。
重要次のパラメーターをコピーしてLinuxサーバーの構成ファイルに貼り付ける前に、パラメーターが番号記号(
#
)でコメントアウトされていないことを確認してください。パラメーターが有効な形式で指定されていることを確認してください。たとえば、余分なスペースがあると、サービスが再起動に失敗する可能性があります。次のパラメーターの値を変更します:
#匿名ユーザーがFTPサーバーにログオンできないようにします。 anonymous_enable=NO #ローカルユーザーがFTPサーバーにログオンできるようにします。 local_enable=YES #IPv4ソケットでリッスンします。 listen=YES
行頭に番号記号(#)を追加して次のパラメーターをコメントアウトし、IPv6ソケットでのリッスンを無効にします。
#listen_ipv6=YES
次のパラメーターを構成ファイルの末尾に追加します。
pasv_address
パラメーターの値をシンプルアプリケーションサーバーのパブリックIPアドレスに置き換えます。#ローカルユーザーがログオンした後に、ローカルユーザーのディレクトリを指定します。 local_root=/var/ftp/test #ログオン後、すべてのユーザーをホームディレクトリに制限します。 chroot_local_user=YES #リストを使用して、例外ユーザーを指定します。例外ユーザーとは、ログオン後にホームディレクトリに制限されないユーザーのことです。 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 #パッシブモードでデータ転送に使用できるポート範囲の最小ポート番号を指定します。 #50000~50010などの高い番号範囲のポートを使用することをお勧めします。これらのポートは、FTPサーバーへのより安全なアクセスを提供します。 pasv_min_port=50000 #パッシブモード接続のためにFTPクライアントに送信されるポート範囲の最大ポート番号を指定します。 pasv_max_port=50010
その他のパラメーターについては、vsftpd構成ファイルとパラメーターを参照してください。
Escキーを押して編集モードを終了します。
:wq
と入力し、Enterキーを押してファイルを保存して閉じます。
chroot_listファイルを作成し、例外ユーザーのリストをファイルに書き込みます。
次のコマンドを実行して、chroot_listファイルを作成します。
sudo vim /etc/vsftpd/chroot_list
Iキーを押して編集モードに入ります。
例外ユーザーを指定します。例外ユーザーはホームディレクトリに制限されず、他のディレクトリにアクセスできます。
重要例外ユーザーが存在しない場合でも、chroot_listファイルを作成する必要があります。ファイルは空でも構いません。
Escキーを押して編集モードを終了します。
:wq
と入力し、Enterキーを押してファイルを保存して閉じます。
次のコマンドを実行してファイアウォールを無効にします。
sudo systemctl stop firewalld
構成ファイルを変更します。
次のコマンドを実行して/etc/ssh/sshd_configファイルを開きます。
sudo vi /etc/ssh/sshd_config
ファイルの末尾で
PasswordAuthentication
の値をyes
に変更します。Esc
キーを押して編集モードを終了します。:wq!
と入力し、Enter
キーを押して構成ファイルを保存して閉じます。
次のコマンドを実行して、FTPサービスを再起動します。
sudo systemctl restart vsftpd.service
匿名ユーザーモード
次のコマンドを実行して、/etc/vsftpd/vsftpd.conf構成ファイルを変更します。
vsftpdをインストールするときにapt install vsftpdコマンドを実行した場合、構成ファイルのパスは/etc/vsftpd.confです。
sudo vim /etc/vsftpd/vsftpd.conf
Iキーを押して編集モードに入ります。
匿名モードを指定する
anonymous_enable
パラメーターと、匿名アップロード許可を指定するanon_upload_enable
パラメーターを見つけます。構成ファイルのデフォルト設定は、シンプルアプリケーションサーバーのLinuxディストリビューションによって異なる場合があります。パラメーターを変更した後、両方のパラメーターの値がYESであることを確認してください。
anonymous_enable=YES anon_upload_enable=YES listen=YES listen_ipv6=NO
次のパラメーターをファイルの末尾に追加します。
重要次のパラメーターをコピーしてLinuxサーバーの構成ファイルに貼り付ける前に、パラメーターが番号記号(
#
)でコメントアウトされていないことを確認してください。パラメーターが有効な形式で指定されていることを確認してください。たとえば、余分なスペースがあると、サービスが再起動に失敗する可能性があります。#パッシブモードを有効にします。 pasv_enable=YES #パッシブモードでデータ転送に使用できるポート範囲の最小ポート番号を指定します。 #50000~50010などの高い番号範囲のポートを使用することをお勧めします。これらのポートは、FTPサーバーへのより安全なアクセスを提供します。 pasv_min_port=50000 #パッシブモード接続のためにFTPクライアントに送信されるポート範囲の最大ポート番号を指定します。 pasv_max_port=50010 #シンプルアプリケーションサーバーのパブリックIPアドレスを入力します。 pasv_address=39.105.xx.xx
Escキーを押して編集モードを終了します。
:wq
と入力し、Enterキーを押してファイルを保存して閉じます。次のコマンドを実行して、/var/ftp/pubディレクトリのパーミッションを変更し、FTPユーザーにディレクトリへの書き込みパーミッションを付与します。
/var/ftp/pubは、FTPサービスのデフォルトのファイルディレクトリです。
sudo chmod o+w /var/ftp/pub/
次のコマンドを実行して、FTPサービスを再起動します。
sudo systemctl restart vsftpd.service
手順 4: Linuxサーバーのファイアウォールを構成する
FTPサーバーを構築した後、次の表に示すポートを有効にするために、Linuxサーバーのファイアウォールにルールを追加する必要があります。詳細については、ファイアウォールの管理を参照してください。
パッシブモードでは、pasv_min_port
と pasv_max_port
で指定されたポート範囲に属するすべてのポートと、ポート 21 を /etc/vsftpd/vsftpd.conf 設定ファイルで有効にする必要があります。次の表に、構成の詳細を示します。
アプリケーションタイプ | プロトコル | ポート範囲 |
FTP | TCP | 21 |
カスタム | TCP |
|
ファイアウォールルールが追加されると、次の図に示すように、ファイアウォールページに表示されます。
手順 5: FTPクライアントからFTPサーバーにアクセスできるかどうかを確認する
FileZillaクライアントを開きます。
上部のナビゲーションバーで、
を選択します。サイトマネージャーダイアログボックスの左下隅にある新規サイト(N)をクリックします。
新しいサイトの名前を入力し、新しいサイトを構成します。
説明この例では、FileZilla 3.64.0を使用しています。実際のインターフェースは、FileZillaのバージョンによって異なる場合があります。
パラメーター:
名前: カスタムサイト名。例:
test-01
。プロトコル: FTP。
ホスト: FTPサーバーのパブリックIPアドレス。このトピックでは、LinuxインスタンスのパブリックIPアドレスを使用します。例:
121.43.XX.XX
。ポート: 21。
ログオンタイプ: 匿名。
この例では、FTPクライアントを使用して匿名モードでFTPサーバーに接続します。FTPサーバーへのアクセスを管理する場合は、ログオンタイプを通常に設定し、ユーザー名とパスワードを構成します。
接続をクリックします。
FTPサーバーに接続すると、ファイルのアップロード、ダウンロード、削除ができます。次の図は、FileZillaインターフェースの例を示しています。次の表は、上記のインターフェースのセクションについて説明しています。
セクション
説明
①
コマンド、FTPサーバーの接続状態、タスクの実行結果が表示されます。
②
オンプレミスホストに関する情報(ホストのディレクトリ情報を含む)が表示されます。
③
リモートサーバーに関する情報(FTPサーバーのディレクトリ情報を含む)が表示されます。匿名モードでは、デフォルトのディレクトリは
/pub
です。④
FTPタスクキューやログなどのレコードが表示されます。
vsftpd構成ファイルとパラメーター
次のセクションでは、/etc/vsftpd
ディレクトリ内のファイルについて説明します。
/etc/vsftpd/vsftpd.conf
は、vsftpdのコア構成ファイルです。/etc/vsftpd/ftpusers
は、ブラックリストファイルです。このファイルで指定されたユーザーは、FTPサーバーにアクセスできません。/etc/vsftpd/user_list
は、ホワイトリストファイルです。このファイルで指定されたユーザーは、FTPサーバーにアクセスできます。
次の表は、vsftpd.conf
構成ファイルで使用されるパラメーターについて説明しています。
次の表は、ログオン制御のパラメーターについて説明しています。
パラメーター
説明
anonymous_enable=YES
匿名ユーザーを受け入れます。
no_anon_password=YES
匿名ユーザーは、パスワードなしでFTPサーバーにログオンできます。
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
匿名ユーザーによってアップロードされたファイルの所有権を指定します。