非常に安全なFTPデーモン (vsftpd) は、広く使用されているオープンソースのFTPサーバーソフトウェアです。 vsftpdは、その高性能、高セキュリティ、および高い安定性で知られており、FTP、SSH経由のSFTP、およびSSL/TLS経由のFTPなど、さまざまなFTP関連のプロトコルをサポートしています。 このトピックでは、Linux Elastic Compute Service (ECS) インスタンスにvsftpdをインストールして設定する方法について説明します。
前提条件
ECSインスタンスが作成され、次の設定があります。 ECSインスタンスが作成されていない場合は、ECSインスタンスを作成します。 詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。
オペレーティングシステム: Alibaba Cloud Linux、CentOS 7.x 64ビット、CentOS 8.x 64ビット、またはUbuntu。
IPアドレス: インスタンスに静的パブリックIPアドレス (自動割り当てまたはシステム割り当てパブリックIPアドレスとも呼ばれます) が割り当てられるか、elastic IPアドレス (EIP) に関連付けられています。 EIPをECSインスタンスに関連付ける方法については、「EIPの関連付けまたは関連付けの解除」をご参照ください。
セキュリティグループ: インバウンドルールがインスタンスのセキュリティグループに追加され、ポート22、80、および443を開きます。 インバウンドセキュリティグループルールを追加する方法の詳細については、「セキュリティグループルールの追加」をご参照ください。
手順
ステップ1: vsftpdのインストール
Linuxインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行して vsftpd をインストールします。
Alibaba Cloud Linux、CentOS 7.x、またはCentOS 8.x
重要CentOS 8は寿命 (EOL) に達しました。 Linuxコミュニティルールに従って、すべてのコンテンツが次のCentOS 8リポジトリアドレスから削除され http://mirror.centos.org/centos/8/ た。 Alibaba CloudでデフォルトのCentOS 8リポジトリを引き続き使用すると、エラーが報告されます。 特定のCentOS 8インストールパッケージを使用するには、CentOS 8リポジトリアドレスを変更します。 詳細については、「CentOS 8リポジトリアドレスの変更」をご参照ください。
sudo yum install -y vsftpd
Ubuntu
sudo apt update sudo apt install -y vsftpd
次の図に示すコマンド出力は、vsftpdがインストールされていることを示します。
説明インストールできるvsftpdのバージョンは、オペレーティングシステムによって異なります。
次のコマンドを実行してFTPサービスを開始し、システム起動時にサービスを自動的に開始できるようにします。
sudo systemctl start vsftpd sudo systemctl enable vsftpd
説明上記のコマンドの実行時にシステムが
[ジョブfor vsftpd.serviceがエラーコードで終了したため]
エラーメッセージを返した場合は、次の問題が存在するかどうかを確認し、問題のトラブルシューティングを行います。IPv6アドレスがサポートされていない場合は、設定ファイル
/etc/vsftpd/vsftpd.conf
のlisten_ipv6パラメーターの値をYES
からNO
に変更します。/etc/sysconfig/network-scripts/ifcfg-xxx
設定ファイルで指定されているメディアアクセス制御 (MAC) アドレスが実際のMACアドレスと一致しない場合は、ifconfig
コマンドを実行して実際のMACアドレスを照会します。 次に、HWADDR=<実際のMACアドレス>
を設定ファイルに追加するか、既存のHWADDR値を設定ファイルの実際のMACアドレスに置き換えます。
次のコマンドを実行して、FTPサービスのリスニングポートを照会します。
sudo netstat -antup | grep ftp
次の図に示すコマンド出力は、FTPサービスが開始され、ポート21をリッスンしていることを示しています。
デフォルトでは、vsftpdでは匿名アクセスが有効になっています。 ユーザー名またはパスワードなしでFTPサーバーにログオンできます。 ただし、ファイルを変更またはアップロードする権限はありません。
ステップ2: vsftpdの設定
Linuxユーザーを作成し、ユーザーのパスワードを指定します。
FTPは次の認証モードをサポートしています。
匿名ユーザーモード: このモードでは、ユーザーはユーザー名またはパスワードなしでFTPサーバーにログオンできます。 これは最も安全でない認証モードである。 ほとんどの場合、このモードは重要でないパブリックファイルを保存するために使用されます。 本番環境でファイルを保存するためにこのモードを使用しないことを推奨します。
ローカルユーザーモード: このモードでは、ローカルLinuxユーザーを作成する必要があります。 このモードは、匿名ユーザーモードよりも安全です。
仮想ユーザーモード: 仮想ユーザーはFTPサーバーの専用ユーザーです。 仮想ユーザーは、Linuxシステムが提供するFTPサービスにのみアクセスでき、システムの他のリソースにはアクセスできません。 これにより、FTPサーバのセキュリティが強化される。
このセクションでは、FTPサービス用にローカルLinuxユーザーが作成されます。
Alibaba Cloud Linux、CentOS 7.x、またはCentOS 8.x
次のコマンドを実行して、FTPサービス用のLinuxユーザーを作成します。
この例では、
ftptest
ユーザーが作成されます。sudo adduser ftptest
次のコマンドを実行して、
ftptest
ユーザーのパスワードを変更します。sudo passwd ftptest
コマンドラインのプロンプトに従って、ユーザーのパスワードを変更します。
Ubuntu
次のコマンドを実行して、FTPサービス用のLinuxユーザーを作成します。
この例では、
ftptest
ユーザーが作成されます。sudo adduser ftptest
プロンプトに従ってパスワードを入力して確認します。
次のコマンドを実行して、FTPサービス用のファイルディレクトリを作成します。
sudo mkdir -p /var/ftp/test
次のコマンドを実行して、テストファイルを作成します。
テストファイルは、FTPクライアントがFTPサーバーにアクセスするときに使用されます。
sudo touch /var/ftp/test/testfile.txt
次のコマンドを実行して、
/var/ftp/test
ディレクトリの所有者をftptest
に変更します。sudo chown -R ftptest:ftptest /var/ftp/test
vsftpd.conf
設定ファイルを変更します。次のコマンドを実行して、vsftpdの設定ファイルを開きます。
Alibaba Cloud Linux、CentOS 7.x、またはCentOS 8.x
sudo vim /etc/vsftpd/vsftpd.conf
Ubuntu
sudo vim /etc/vsftpd.conf
I
キーを押して挿入モードに入ります。FTPサーバーの作業モードを設定します。
FTPサーバーは、次の作業モードをサポートしています。
アクティブモード: FTPクライアントはFTPポート情報をFTPサーバーに送信し、FTPサーバーはポートを介したFTPクライアントへの接続を初期化します。
パッシブモード: FTPサーバーはポートを開き、ポート情報をFTPクライアントに送信します。 FTPクライアントは、ポートを介してFTPサーバーへの接続を初期化し、FTPサーバーはその接続を受け入れます。
説明ほとんどのFTPクライアントはLANに配置され、独立したパブリックIPアドレスを持たず、ファイアウォールによって保護されています。 その結果、アクティブモードのFTPサーバーはクライアントへの接続を確立できません。 特別な要件がない場合は、FTPサーバーにパッシブモードを使用することをお勧めします。
このセクションでは、FTPサーバーにパッシブモードが使用されます。 次のパラメーターを設定し、他のパラメーターのデフォルト値を保持します。
重要設定ファイルの情報を変更または追加するときは、形式に注意してください。 たとえば、余分なスペースがあると、サービスの再起動に失敗する可能性があります。
次のパラメータを変更します。
#Prevent anonymous users from logging on to the FTP server. anonymous_enable=NO #Allow local users to log on to the FTP server. local_enable=YES #Listen on IPv4 sockets. listen=YES
行の先頭に番号記号 (#) を追加して、次のパラメーターをコメントアウトし、IPv6ソケットのリスニングを無効にします。
#listen_ipv6=YES
設定ファイルの末尾に次のパラメーターを追加します。
pasv_address
パラメーターの値をFTPサーバーのパブリックIPアドレスに変更します。Alibaba Cloud Linux、CentOS 7.x、またはCentOS 8.x
#Specify the directory of a local user after the local user logs on. local_root=/var/ftp/test #Limit all users to the home directory after the users log on. chroot_local_user=YES #Use a list to specify exception users. Exception users are not limited to the home directory after they log on. chroot_list_enable=YES #Specify a file to store the list of exception users. chroot_list_file=/etc/vsftpd/chroot_list #Enable passive mode. pasv_enable=YES allow_writeable_chroot=YES #Enter the public IP address of the FTP server. In this example, the public IP address of the Linux instance that is used. pasv_address=<Public IP address of the FTP server> #Specify the minimum port number of the port range to which FTP connections are established in passive mode. #We recommend that you use ports from a range of high-number ports, such as 50000 to 50010. These ports provide more secure access to the FTP server. pasv_min_port=50000 #Specify the maximum port number of the port range to which FTP connections are established in passive mode. pasv_max_port=50010
Ubuntu
#Specify the directory of a local user after the local user logs on. local_root=/var/ftp/test #Limit all users to the home directory after the users log on. chroot_local_user=YES #Use a list to specify exception users. Exception users are not limited to the home directory after they log on. chroot_list_enable=YES #Specify a file to store the list of exception users. chroot_list_file=/etc/vsftpd.chroot_list #Enable passive mode. pasv_enable=YES allow_writeable_chroot=YES #Enter the public IP address of the FTP server. In this example, the public IP address of the Linux instance that is used. pasv_address=<Public IP address of the FTP server> #Specify the minimum port number of the port range to which FTP connections are established in passive mode. #We recommend that you use ports from a range of high-number ports, such as 50000 to 50010. These ports provide more secure access to the FTP server. pasv_min_port=50000 #Specify the maximum port number of the port range to which FTP connections are established in passive mode. pasv_max_port=50010
その他のパラメーターについては、このトピックの「vsftpd設定ファイルとパラメーター」をご参照ください。
[Esc]
キーを押して:wq
と入力し、[enter]
キーを押して設定ファイルを保存して閉じます。
chroot_list
ファイルを作成し、例外ユーザーのリストをファイルに書き込みます。次のコマンドを実行して、
chroot_list
ファイルを作成します。Alibaba Cloud Linux、CentOS 7.x、またはCentOS 8.x
sudo vim /etc/vsftpd/chroot_list
Ubuntu
sudo vim /etc/vsftpd.chroot_list
I
キーを押して挿入モードに入ります。例外ユーザーを指定します。 例外ユーザーはホームディレクトリに限定されず、他のディレクトリにアクセスできます。
[Esc]
キーを押して:wq
と入力し、[enter]
キーを押して設定ファイルを保存して閉じます。
重要例外ユーザーが存在しない場合でも、
chroot_list
ファイルを作成する必要があります。 ファイルは空にすることができます。次のコマンドを実行して、vsftpdサービスを再起動します。
sudo systemctl restart vsftpd
ステップ 3:セキュリティグループの設定
FTPサイトを構築した後、インスタンスのセキュリティグループにインバウンドルールを追加して、次のFTPポートを開きます。 インバウンドセキュリティグループルールを追加する方法の詳細については、「セキュリティグループルールの追加」をご参照ください。
ほとんどのクライアントはLANにあり、プライベートIPアドレスをパブリックIPアドレスにマッピングして外部リソースと通信できます。 したがって、ipconfig
またはifconfig
コマンドによって返されるIPアドレスは、クライアントの実際のパブリックIPアドレスではない可能性があります。 クライアントからFTPサーバーにログオンできない場合は、クライアントのパブリックIPアドレスを確認してください。
パッシブモードでは、ポート21と、/etc/vsftpd/vsftpd.conf
設定ファイルのpasv_min_port
およびpasv_max_port
パラメーターで指定されたポート範囲内のすべてのポートでトラフィックを許可する必要があります。 次の表に、インバウンドセキュリティグループルールの設定方法を示します。
方向 | Action | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
インバウンド | 許可 | カスタマイズTCP | 21/21 | FTPサーバーにアクセスするすべてのクライアントのパブリックIPアドレス。 IPアドレスはコンマ (,) で区切ります。 すべてのクライアントがFTPサーバーにアクセスできるようにするには、権限付与オブジェクトとして0.0.0.0/0を指定します。 |
インバウンド | 許可 | カスタマイズTCP |
| FTPサーバーにアクセスするすべてのクライアントのパブリックIPアドレス。 IPアドレスはコンマ (,) で区切ります。 すべてのクライアントがFTPサーバーにアクセスできるようにするには、権限付与オブジェクトとして0.0.0.0/0を指定します。 |
ステップ4: FTPサーバーの接続をテストする
FTPクライアント、Windowsコマンドラインツール、またはブラウザを使用して、FTPサーバーにアクセスできるかどうかを確認できます。 この例では、Windows Server 2012 R2 64ビットオペレーティングシステムを実行するオンプレミスホストをFTPクライアントとして使用し、FTPサーバーへのアクセス方法を示します。
オンプレミスホストで、このPCを開きます。
アドレスバーに、
ftp:// <FTPサーバーのパブリックIPアドレス >:< FTPポート>
と入力します。 この例では、LinuxインスタンスのパブリックIPアドレスが使用されます。 例:ftp:// 121.43.XX.XX:21
[ログイン] ダイアログボックスで、設定したFTPユーザー名とパスワードを入力し、[ログイン] をクリックします。
FTPサーバーにログインした後、FTPサーバー上の指定されたディレクトリ内のファイルを表示できます。 たとえば、testfile.txtという名前のテストファイルを表示できます。
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= (none)
匿名ユーザーのホームディレクトリを指定します。
local_enable=YES
ローカルユーザーを受け入れます。
local_root= (none)
ローカルユーザーのホームディレクトリを指定します。
次の表に、ユーザーの権限を管理するためのパラメーターを示します。
パラメーター
説明
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
匿名ユーザーによってアップロードされるファイルの所有権を指定します。
よくある質問
Q1: オンプレミスホストがWindowsオペレーティングシステムを実行しているときにFTPサーバーからファイルをダウンロードできない場合はどうすればよいですか?
A: Internet Explorerでダウンロード権限を有効にするには、次の操作を実行します。
オンプレミスホストでInternet Explorerを開きます。
ブラウザの右上隅にあるアイコンをクリックし、[インターネットオプション] をクリックします。
[インターネットオプション] ダイアログボックスの上部で、[セキュリティ] タブをクリックします。
[セキュリティ設定を表示または変更するゾーンの選択] セクションで、[インターネット] をクリックし、[このゾーンのセキュリティレベル] セクションの [カスタムレベル...] をクリックします。
を選択し、[OK] をクリックします。
[適用] 、[OK] の順にクリックします。
Q2: コマンドラインツールまたはブラウザを使用してWindowsオペレーティングシステムのFTPサーバーに接続するときにエラーが報告された場合はどうすればよいですか?
A: FTPサーバーに関連するエラーメッセージに基づいて、問題のトラブルシューティングを行うことができます。 問題のトラブルシューティングが難しい場合は、FileZillaなどのサードパーティのFTPクライアント接続ツールを使用することをお勧めします。 FileZillaクライアントをダウンロードするには、FileZillaにアクセスしてください。 この例では、FileZillaを使用して匿名モードでFTPサーバーに接続します。
vsftpdを匿名モードで設定します。
次のコマンドを実行して、
/etc/vsftpd/vsftpd.conf
設定ファイルを変更します。apt install vsftpd
コマンドを実行してvsftpdをインストールした場合、設定ファイルのパスは/etc/vsftpd.conf
です。sudo vim /etc/vsftpd/vsftpd.conf
I
キーを押して挿入モードに入ります。権限をコメントアウトし、
anon_upload_enable
パラメーターをYESに設定して、匿名ユーザーがファイルをアップロードできるようにします。Esc
キーを押して:wq
と入力し、enterキーを押してファイルを保存して閉じます。次の図に、変更された構成ファイルのサンプルを示します。
次のコマンドを実行して、FTPユーザーに
/var/ftp/pub
ディレクトリへの書き込み権限を付与します。/var/ftp/pub
は、FTPサービスのデフォルトのファイルディレクトリです。sudo chmod o+w /var/ftp/pub/
次のコマンドを実行して、設定ファイルをリロードします。
sudo systemctl restart vsftpd
FileZillaをダウンロードしてインストールします。
FileZillaを使用して、匿名モードでFTPサーバーに接続します。
FileZillaクライアントを開きます。
上部のナビゲーションバーで、
を選択します。[サイトマネージャー] ダイアログボックスの左下隅で、[新しいサイト (N)] をクリックします。
新しいサイトの名前を入力し、新しいサイトを設定します。
説明この例では、FileZilla 3.64.0が使用されます。 実際のインターフェイスは、FileZillaのバージョンによって異なる場合があります。
パラメータ:
名前: カスタムサイト名。 例:
test-01
プロトコル: FTP。
Host: FTPサーバーのパブリックIPアドレス。 このトピックでは、LinuxインスタンスのパブリックIPアドレスを使用します。 例:
121.43.XX.XX
ポート: 21。
ログオンタイプ: 匿名。
この例では、FTPクライアントを使用して匿名モードでFTPサーバーに接続します。 FTPサーバーへのアクセスを管理する場合は、ログオンタイプをnormalに設定し、ユーザー名とパスワードを設定します。
[接続] をクリックします。
FTPサーバーに接続した後、ファイルをアップロード、ダウンロード、および削除できます。 次の図は、サンプルのFileZillaインターフェイスを示しています。 次の表では、上記のインターフェイスのセクションについて説明します。
セクション
説明
①
コマンド, FTPサーバの接続状態, およびタスクの実行結果を表示します。
②
ホストのディレクトリ情報を含む、オンプレミスホストに関する情報を表示します。
③
FTPサーバのディレクトリ情報など、リモートサーバに関する情報を表示します。 匿名モードでは、デフォルトのディレクトリは
/pub
です。④
FTPタスクキューとログを含むレコードを表示します。
関連ドキュメント
Windowsインスタンス上にFTPサイトを構築できます。 詳細については、「WindowsインスタンスでのFTPサイトの構築」をご参照ください。