すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:CentOS 8インスタンスにFTPサイトを構築する

最終更新日:Feb 27, 2024

非常に安全な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のインストール

  1. Linuxインスタンスに接続します。

    詳細については、「接続方法」をご参照ください。

  2. CentOS 8リポジトリアドレスを変更します。

    CentOS 8は寿命 (EOL) に達しました。 Linuxコミュニティルールに従って、すべてのコンテンツはCentOS 8リポジトリアドレスhttp://mirror.centos.org/centos/8/ から削除されました。 Alibaba CloudでデフォルトのCentOS 8リポジトリを引き続き使用すると、エラーが報告されます。 CentOS 8の特定のインストールパッケージを使用するには、CentOS 8リポジトリアドレスを変更します。 詳細については、「CentOS 8リポジトリアドレスの変更」をご参照ください。 .

  3. 次のコマンドを実行してvsftpdをインストールします。

    dnf install -y vsftpd

    次のコマンド出力が返された場合、vsftpdがインストールされます。vsftpd 3.0.3

  4. 次のコマンドを実行して、システムの起動時にFTPサービスを自動的に開始できるようにします。

    systemctlを有効にするvsftpd.service
  5. 次のコマンドを実行して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アドレスに変更します。

  6. 次のコマンドを実行して、FTPサービスのリスニングポートを照会します。

    netstat -antup | grep ftp

    次のコマンド出力が返されると、FTPサービスが開始され、ポート21でリッスンします。ftp port

    デフォルトでは、ローカルユーザーモードが有効になっています。 FTPサービスを使用するには、他のパラメーターを設定します。

手順2: vsftpdの設定

この例では、vsftpdはデータセキュリティを確保するためにパッシブおよびローカルユーザーモードで設定されています。

  1. 次のコマンドを実行して、FTPサービス用のLinuxユーザーを作成します。

    この例では、ftptestユーザーが作成されます。

    adduser ftptest
  2. 次のコマンドを実行して、ftptestユーザーのパスワードを変更します。

    passwd ftptest

    コマンドラインの指示に従って、ユーザーのパスワードを変更します。

  3. 次のコマンドを実行して、FTPサービスのファイルディレクトリを作成します。

    mkdir /var/ftp/test
  4. 次のコマンドを実行して、テストファイルを作成します。

    テストファイルは、FTPクライアントがFTPサーバーにアクセスするときに使用されます。

    タッチ /var/ftp/test/testfile.txt
  5. 次のコマンドを実行して、/var/ftp/testディレクトリの所有者をftptestに変更します。

    chown -R ftptest:ftptest /var/ftp/test
  6. vsftpd.conf設定ファイルを変更します。

    1. 次のコマンドを実行して、vsftpdの設定ファイルを開きます。

      apt install vsftpdコマンドを実行してvsftpdをインストールした場合、設定ファイルのパスは /etc/vsftpd.confです。

      vim /etc/vsftpd/vsftpd.conf
    2. Iキーを押して挿入モードに入ります。

    3. 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設定ファイルとパラメーター」をご参照ください。

    4. [Esc] キーを押して :wqと入力し、[enter] キーを押して設定ファイルを保存して閉じます。

  7. chroot_listファイルを作成し、例外ユーザーのリストをファイルに書き込みます。

    1. 次のコマンドを実行して、chroot_listファイルを作成します。

      vim /etc/vsftpd/chroot_list
    2. Iキーを押して挿入モードに入ります。

    3. 例外ユーザーのリストを入力します。 例外ユーザーはホームディレクトリに限定されず、他のディレクトリにアクセスできます。

    4. [Esc] キーを押して :wqと入力し、[enter] キーを押して設定ファイルを保存して閉じます。

    重要

    例外ユーザーが存在しない場合でも、chroot_listファイルを作成する必要があります。 ファイルは空にすることができます。

  8. 次のコマンドを実行して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サーバーへのアクセス方法を示します。

  1. オンプレミスホストで、このコンピュータを開きます。

  2. アドレスバーに、ftp:// <FTPサーバーのパブリックIPアドレス >:< FTPポート> と入力します。 この例では、LinuxインスタンスのパブリックIPアドレスが使用されます。 例: ftp:// 121.43.XX.XX:21

  3. [ログイン] ダイアログボックスで、設定したFTPユーザー名とパスワードを入力し、[ログイン] をクリックします。

    FTPサーバーにログインした後、FTPサーバー上の指定されたディレクトリ内のファイルを表示できます。 たとえば、testfile.txtという名前のテストファイルを表示できます。ftp client

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

    匿名ユーザーによってアップロードされるファイルの所有権を指定します。