非常に安全なFTPデーモン (vsftpd) は、Linux用の軽量で安全で使いやすいFTPサーバーソフトウェアです。 このトピックでは、Linux Elastic Compute Service (ECS) インスタンスにvsftpdをインストールして設定する方法について説明します。
前提条件
ECSインスタンスが作成され、パブリックIPアドレスが割り当てられます。 ECSインスタンスの作成方法については、「作成方法」をご参照ください。
背景情報
FTPは、ファイルを転送するために使用されるプロトコルです。 FTPはクライアント /サーバーアーキテクチャに基づいており、次の作業モードをサポートしています。
アクティブモード: クライアントがポート情報をFTPサーバーに送信し、サーバーがポートへの接続を確立します。
パッシブモード: FTPサーバーはポートを有効にし、ポート情報をクライアントに送信します。 クライアントはポートへの接続を開始し、サーバーは接続を受け入れます。
ほとんどのFTPクライアントはLANに配置され、独立したパブリックIPアドレスを持たず、ファイアウォールによって保護されています。 その結果、アクティブモードのFTPサーバーは、クライアントへの接続を簡単に確立できません。 特別な要件がない場合は、FTPサーバーにパッシブモードを使用することをお勧めします。
FTPは次の認証モードをサポートしています。
匿名ユーザーモード: このモードでは、ユーザーはユーザー名やパスワードを必要とせずにFTPサーバーにログオンできます。 これは最も安全でない認証モードである。 ほとんどの場合、このモードは重要でないパブリックファイルを保存するために使用されます。 本番環境でファイルを保存するためにこのモードを使用しないことを推奨します
ローカルユーザーモード: このモードでは、ユーザーはローカルLinuxアカウントを持っている必要があります。 このモードは、匿名ユーザーモードよりも安全です。
仮想ユーザーモード: 仮想ユーザーはFTPサーバーの専用ユーザーです。 仮想ユーザーは、Linuxシステムが提供するFTPサービスにのみアクセスでき、システムの他のリソースにはアクセスできません。 これにより、FTPサーバのセキュリティが強化される。
このトピックでは、vsftpdはパッシブモードでのローカルユーザーアクセス用に設定されています。 匿名ユーザーがFTPサーバーにアクセスできるようにFTPサーバーを構成する方法と、サードパーティのFTPクライアントツールを使用する方法については、「CentOS 7インスタンスにFTPサイトを手動で構築する」トピックのFAQを参照してください。
このトピックでは、次のリソースが手順で使用されています。
インスタンスタイプ: ecs.g6.large
オペレーティングシステム: CentOS 8.2 64ビット
vsftpd: 3.0.3
コマンドとパラメータは、ソフトウェアのバージョンによって異なる場合があります。
ステップ1: vsftpdのインストール
Linuxインスタンスに接続します。
詳細については、「接続方法」をご参照ください。
CentOS 8リポジトリアドレスを変更します。
CentOS 8は寿命 (EOL) に達しました。 Linuxコミュニティルールに従って、すべてのコンテンツはCentOS 8リポジトリアドレスhttp://mirror.centos.org/centos/8/ から削除されました。 Alibaba CloudでデフォルトのCentOS 8リポジトリを引き続き使用すると、エラーが報告されます。 CentOS 8の特定のインストールパッケージを使用するには、CentOS 8リポジトリアドレスを変更します。 詳細については、「CentOS 8リポジトリアドレスの変更」をご参照ください。 .
次のコマンドを実行してvsftpdをインストールします。
dnf install -y vsftpd
次のコマンド出力が返された場合、vsftpdがインストールされます。
次のコマンドを実行して、システムの起動時にFTPサービスを自動的に開始できるようにします。
systemctlを有効にするvsftpd.service
次のコマンドを実行してFTPサービスを開始します。
systemctl開始vsftpd.service
説明上記のコマンドの実行時にシステムがUsb for vsftpd.service failed because the control process exited with error codeエラーメッセージを返した場合は、次の問題が発生しているかどうかを確認し、問題のトラブルシューティングを行います。
ネットワーク環境がIPv6アドレスをサポートしていない場合は、vim /etc/vsftpd/vsftpd.confコマンドを実行して、listen_ipv6の値を
YES
からNO
に変更します。/etc/sysconfig/network-scripts/ifcfg-xxx設定ファイルでネットワークインターフェイスコントローラー (NIC) に指定されているMACアドレスがNICの実際のMACアドレスでない場合は、ifconfigコマンドを実行してNICのMACアドレスを照会します。 次に、
HWADDR=<NICの実際のMACアドレス>
をファイルに追加するか、ファイル内のHWADDRをNICの実際のMACアドレスに変更します。
次のコマンドを実行して、FTPサービスのリスニングポートを照会します。
netstat -antup | grep ftp
次のコマンド出力が返されると、FTPサービスが開始され、ポート21でリッスンします。
デフォルトでは、ローカルユーザーモードが有効になっています。 FTPサービスを使用するには、他のパラメーターを設定します。
手順2: vsftpdの設定
この例では、vsftpdはデータセキュリティを確保するためにパッシブおよびローカルユーザーモードで設定されています。
次のコマンドを実行して、FTPサービス用のLinuxユーザーを作成します。
この例では、
ftptest
ユーザーが作成されます。adduser ftptest
次のコマンドを実行して、
ftptest
ユーザーのパスワードを変更します。passwd ftptest
コマンドラインの指示に従って、ユーザーのパスワードを変更します。
次のコマンドを実行して、FTPサービスのファイルディレクトリを作成します。
mkdir /var/ftp/test
次のコマンドを実行して、テストファイルを作成します。
テストファイルは、FTPクライアントがFTPサーバーにアクセスするときに使用されます。
タッチ /var/ftp/test/testfile.txt
次のコマンドを実行して、
/var/ftp/test
ディレクトリの所有者をftptest
に変更します。chown -R ftptest:ftptest /var/ftp/test
vsftpd.conf
設定ファイルを変更します。次のコマンドを実行して、vsftpdの設定ファイルを開きます。
apt install vsftpd
コマンドを実行してvsftpdをインストールした場合、設定ファイルのパスは/etc/vsftpd.conf
です。vim /etc/vsftpd/vsftpd.conf
Iキーを押して挿入モードに入ります。
FTPサーバーのパッシブモードを有効にします。
次のパラメーターを設定します。
重要設定ファイルの情報を変更または追加するときは、形式に注意してください。 たとえば、余分なスペースがあると、サービスの再起動に失敗する可能性があります。
# 次のパラメーター以外のパラメーターにはデフォルト値を使用します。# 次のパラメータの値を変更します。# 匿名ユーザーのFTPサーバーへのログオンを無効にします。 anonymous_enable=NO # ローカルユーザーがFTPサーバーにログオンできるようにします。 local_enable=YES # IPv4ソケットでリッスンします。 listen=YES # 行の先頭に番号記号 (#) を追加して、次のパラメータをコメントアウトします。# IPv6ソケットのリスニングを無効にします。 # listen_ipv6=YES # 設定ファイルの末尾に次のパラメーターを追加します。# ローカルユーザーがログオンした後、ローカルユーザーのディレクトリを指定します。 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 # このトピックで使用するLinuxインスタンスのパブリックIPアドレスを入力します。 pasv_address=<FTPサーバのパブリックIPアドレス> # パッシブモード接続のためにFTPクライアントに送信される最も低いポートを指定します。 50000から50010など、高い範囲のポートを使用することを推奨します。 これらのポートは、FTPサーバーへのより安全なアクセスを提供します。 pasv_min_port=<ポート番号> # パッシブモード接続用にFTPクライアントに送信される可能な限り高いポートを指定します。 pasv_max_port=<ポート番号>
その他のパラメーターについては、このトピックの「vsftpd設定ファイルとパラメーター」をご参照ください。
[Esc]
キーを押して:wq
と入力し、[enter]
キーを押して設定ファイルを保存して閉じます。
chroot_list
ファイルを作成し、例外ユーザーのリストをファイルに書き込みます。次のコマンドを実行して、
chroot_list
ファイルを作成します。vim /etc/vsftpd/chroot_list
Iキーを押して挿入モードに入ります。
例外ユーザーのリストを入力します。 例外ユーザーはホームディレクトリに限定されず、他のディレクトリにアクセスできます。
[Esc]
キーを押して:wq
と入力し、[enter]
キーを押して設定ファイルを保存して閉じます。
重要例外ユーザーが存在しない場合でも、
chroot_list
ファイルを作成する必要があります。 ファイルは空にすることができます。次のコマンドを実行してvsftpdを再起動します。
systemctl再起動vsftpd.service
手順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 | pasv_min_port /pasv_max_portを使用します。 例: 50000/50010。 | FTPサーバーにアクセスするすべてのクライアントのパブリックIPアドレス。 IPアドレスはコンマ (,) で区切ります。 すべてのクライアントがFTPサーバーにアクセスできるようにするには、権限付与オブジェクトとして0.0.0.0/0を指定します。 |
手順4: クライアントからFTPサーバーにアクセスできるかどうかを確認する
FTPクライアント、Windowsコマンドラインツール、またはブラウザーを使用して、FTPサーバーにアクセスできるかどうかを確認できます。 この例では、Windows Server 2012 R2 64ビットオペレーティングシステムを実行するオンプレミスホストをFTPクライアントとして使用し、FTPサーバーへのアクセス方法を示します。
オンプレミスホストで、このコンピュータを開きます。
アドレスバーに、
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= (なし)
ローカルユーザーのホームディレクトリを指定します。
次の表に、ユーザーの権限を管理するためのパラメーターを示します。
パラメーター
説明
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
匿名ユーザーによってアップロードされるファイルの所有権を指定します。