Linux の Elastic Compute Service (ECS) インスタンスに vsftpd をインストールして設定し、安全な FTP ファイル転送を有効にします。
クイックデプロイメント
[Run now] をクリックして Terraform Explorer を開き、ECS インスタンス上に FTP サイトを自動的に構築します。
前提条件
次の要件を満たす ECS インスタンスが作成されている必要があります。詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。
-
オペレーティングシステム:Alibaba Cloud Linux 3/2、CentOS 7.x 64 ビット、Ubuntu、または Debian。
-
IP アドレス:インスタンスに固定パブリック IP アドレスまたは Elastic IP Address (EIP) が割り当てられていること。
概要
vsftpd (Very Secure FTP Daemon) は、UNIX および Linux システム向けのオープンソース FTP サーバーです。主な特徴は次のとおりです:
-
高いセキュリティ:厳格なセキュリティ監査と、一般的な攻撃を防ぐための複数のメカニズムを備えています。
-
高いパフォーマンス:効率的なファイル転送で多数の同時接続を処理します。
-
シンプルな設定:さまざまなニーズに対応する、柔軟で分かりやすいオプションを提供します。
-
IPv6 サポート:IPv6 ネットワークをネイティブでサポートします。
vsftpd サービスの構築
Alibaba Cloud Linux 3 および 2/CentOS 7.x
ステップ 1:vsftpd のインストール
-
システムを更新し、
vsftpdをインストールします。sudo yum update -y sudo yum install vsftpd -y -
vsftpd を起動し、起動時に自動的に有効になるように設定します。
sudo systemctl start vsftpd sudo systemctl enable vsftpd -
サービスが実行中であることを確認します。
netstat -antup | grep ftp以下の出力は、vsftpd が実行中であることを示しています。
[root@xxx ~]# systemctl start vsftpd [root@xxx ~]# netstat -antup | grep ftp tcp6 0 0 :::21 :::* LISTEN 16387/vsftpdデフォルトでは、vsftpd は匿名での読み取り専用アクセスを許可します。
ステップ 2:vsftpd の設定
-
FTP ユーザーを作成します。この例では
ftpuserを使用します。sudo useradd -d /data/ftp -s /sbin/nologin ftpuser # ホームディレクトリを指定し、シェルアクセスを無効化 sudo passwd ftpuser -
FTP ディレクトリを作成し、権限を設定します。
sudo mkdir -p /data/ftp # カスタムストレージディレクトリを作成 sudo chown ftpuser:ftpuser /data/ftp sudo chmod 750 /data/ftp # 権限は 755 または 750 である必要があります -
vsftpdの設定ファイルを編集します。説明パッシブモードを使用します。ほとんどのクライアントはファイアウォールや NAT の内側にあり、実際の IP アドレスを公開できません。
-
vsftpdの設定ファイルをバックアップします。sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak -
設定ファイルを編集します。
sudo vim /etc/vsftpd/vsftpd.conf -
基本的なセキュリティ設定を行います。
listen=YES # IPv4 リスナーを有効化 anonymous_enable=NO # 匿名アクセスを無効化 local_enable=YES # ローカルユーザーのログインを有効化 write_enable=YES # ファイルのアップロードを許可 chroot_local_user=YES # ユーザーをホームディレクトリにロック allow_writeable_chroot=YES # chroot の書き込みエラーを解決 -
パッシブモードの設定を追加します。
pasv_enable=YES # パッシブモードを有効化 pasv_min_port=40000 # パッシブポート範囲の下限 pasv_max_port=40100 # パッシブポート範囲の上限 pasv_address=public_ip_address # サーバーのパブリック IP アドレスに設定する必要があります
-
-
vsftpdを再起動します。sudo systemctl restart vsftpd
ステップ 3:セキュリティグループルールの設定
設定した FTP モードに対応するセキュリティグループのインバウンドルールを追加します。詳細については、「セキュリティグループルールの追加」をご参照ください。
アクティブモードでは、NAT の内側にあるクライアントは実際の IP アドレスを公開する必要があり、接続に失敗する可能性があります。
-
アクティブモード:ポート 21 のトラフィックを許可します。
-
パッシブモード:ポート 21 とポート 40000~40100 (/etc/vsftpd/vsftpd.conf の pasv_min_port から pasv_max_port まで) のトラフィックを許可します。詳細については、「FTP パッシブモードのポート設定」をご参照ください。
ステップ 4:FTP サービスの検証
FTP クライアント、ブラウザ、またはファイルエクスプローラーを使用して FTP サービスを検証します。この例では、ファイルエクスプローラーを使用します。
-
ローカル接続をテストします。
サーバーで次のコマンドを実行します。
ftp ftpuser@localhostLogin successfulというメッセージが表示されれば、接続は成功です。# ftp ftpuser@localhost Connected to localhost. 220 (vsFTPd 3.0.5) 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. -
クライアント接続をテストします。
お使いのクライアントマシンでファイルエクスプローラーを開き、アドレスバーに FTP アドレスを入力します。
アドレスの形式は
ftp://<FTP_server_public_IP_address>:21です。接続に成功すると、ファイルエクスプローラーに FTP サーバーのディレクトリ内のファイルが表示されます。FTP のユーザー名とパスワードを入力してログインします。その後、ファイルをアップロードおよびダウンロードできます。
Ubuntu および Debian
ステップ 1:vsftpd のインストール
-
システムを更新し、
vsftpdをインストールします。sudo apt update && sudo apt upgrade -y sudo apt install vsftpd -y -
vsftpdを起動し、起動時に自動的に有効になるように設定します。sudo systemctl start vsftpd sudo systemctl enable vsftpd
ステップ 2:vsftpd の設定
-
専用の FTP ユーザーを作成します。
sudo useradd -m -s /bin/bash ftpuser # ユーザーを作成し、ホームディレクトリを自動的に生成 sudo passwd ftpuser # ユーザーパスワードを設定 (強力なパスワードを推奨) -
ファイルストレージディレクトリを作成し、権限を設定します。
sudo mkdir /home/ftpuser/ftp-files sudo chown ftpuser:ftpuser /home/ftpuser/ftp-files sudo chmod 755 /home/ftpuser/ftp-files -
元の設定ファイルをバックアップします。
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak -
設定ファイルを編集します。
sudo nano /etc/vsftpd.conf次の設定を適用します:
# 基本設定 listen=YES anonymous_enable=NO # 匿名アクセスを無効化 local_enable=YES # ローカルユーザーのログインを許可 write_enable=YES # 書き込み権限を有効化 chroot_local_user=YES # ユーザーをホームディレクトリにロック以下を追加します:
allow_writeable_chroot=YES # chroot ディレクトリへの書き込みを許可 local_root=/home/ftpuser/ftp-files # ftp ユーザーのルートディレクトリを指定 # パッシブモード設定 (外部ネットワーク接続の問題を解決するため) pasv_enable=YES pasv_address=<your_public_ip_address> # ご利用のパブリック IP アドレスに置き換えてください pasv_min_port=40000 pasv_max_port=40100</your_public_ip_address> -
vsftpd を再起動します。
sudo systemctl restart vsftpd -
vsftpd はパスワードなしのデフォルトの ftp ユーザーを作成します。このユーザーにパスワードを設定してください。
sudo passwd ftp強力なパスワードを設定し、他のすべてのプロンプトはスキップします。
-
FTP ユーザーの許可リストにユーザーを追加します。
echo "ftp" | sudo tee -a /etc/vsftpd.userlist -
FTP ディレクトリを作成し、権限を設定します。
-
FTP フォルダを作成します。
sudo mkdir /home/ftp -
フォルダの権限を設定します。
これにより、すべての権限 (777) が付与されます。必要に応じて調整してください。
sudo chmod 777 /home/ftp
-
ステップ 3:セキュリティグループルールの設定
設定した FTP モードに対応するセキュリティグループのインバウンドルールを追加します。詳細については、「セキュリティグループルールの追加」をご参照ください。
アクティブモードでは、NAT の内側にあるクライアントは実際の IP アドレスを公開する必要があり、接続に失敗する可能性があります。
-
アクティブモード:ポート 21 のトラフィックを許可します。
-
パッシブモード:ポート 21 とポート 40000~40100 (/etc/vsftpd/vsftpd.conf の pasv_min_port から pasv_max_port まで) のトラフィックを許可します。詳細については、「Windows での FTP サイトの設定」をご参照ください。
ステップ 4:FTP サービスの検証
FTP クライアント、ブラウザ、またはファイルエクスプローラーを使用して FTP サービスを検証します。この例では、ファイルエクスプローラーを使用します。
-
ローカル接続をテストします。
サーバーで次のコマンドを実行します。
ftp ftpuser@localhostLogin successfulというメッセージが表示されれば、接続は成功です。# ftp ftpuser@localhost Connected to localhost. 220 (vsFTPd 3.0.5) 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. -
クライアント接続をテストします。
お使いのクライアントマシンでファイルエクスプローラーを開き、アドレスバーに FTP アドレスを入力します。
アドレスの形式は
ftp://<FTP_server_public_IP_address>:21です。接続に成功すると、ファイルエクスプローラーに FTP サーバーのディレクトリ内のファイルが表示されます。FTP のユーザー名とパスワードを入力してログインします。その後、ファイルをアップロードおよびダウンロードできます。
トラブルシューティング
|
問題 |
解決策 |
|
|
クライアントとサーバーの両方で、パブリック IP アドレスとファイアウォールルールを確認します。 |
|
|
ディレクトリの権限を 755 に設定します。 |
|
空のディレクトリのみが表示される |
|
|
|
|
|
パッシブモード接続のタイムアウト |
ファイアウォールルールと pasv_address の設定を確認します。 |
|
ファイルをアップロードできない |
ディレクトリの権限が 755 または 750 であることを確認します。 |
付録
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
匿名ユーザーはパスワードなしでログインできます。
anon_root=(none)
匿名ユーザーのホームディレクトリ。
local_enable=YES
ローカルユーザーを受け入れます。
local_root=(none)
ローカルユーザーのホームディレクトリ。
-
ユーザー権限制御パラメーター:
パラメーター
説明
write_enable=YES
ファイルのアップロードを許可します (グローバル)。
local_umask=022
ローカルユーザーがアップロードするファイルの権限。
file_open_mode=0666
アップロードファイルの権限。local_umask と連携して動作します。
anon_upload_enable=NO
匿名でのファイルアップロードを許可します。
anon_mkdir_write_enable=NO
匿名でのディレクトリ作成を許可します。
anon_other_write_enable=NO
匿名での編集および削除操作を許可します。
chown_username=lightwiter
匿名ユーザーによってアップロードされたファイルに割り当てられる所有者。