Edited at

[AWS] EC2でFTPを使いたい

More than 3 years have passed since last update.

EC2上でFTPを使うためのやり方。

キーワード[ vsftp vsftpd EC2 FTP ]


今回使用するのは vsftp 手元のクライアントPCからFTPでファイルをアップロードするのを目標とします。

まあ、ほとんど設定ファイルの編集が終わればそれだけで動いてしまうのですが・・・

大事なのはユーザーをどうするかくらいでしょうか。



セキュリティグループ

FTP接続ではTCP21を解放します。

また、下の例では空いていることを前提に60001-60010を使用しています。

特に何もしていない状態であれば空いているとは思いますが、バッティングしたら変えてください。

AWSCLIを使ってやれば開いてるのを自動的に・・・と思いますが趣旨が変わるのと辛いので今回はやりません。

SG設定

プロトコル
ポート
ソース

TCP
22
0.0.0.0/0

TCP
60001-60010
0.0.0.0/0

--


インストール

sudo su

yum install vsftpd -y


参考:Amazon EC2 (Amazon Linux) での vsftpd インストールと設定

通りに設定。

vi /etc/vsftpd/vsftpd.conf を編集します。

修正は下記をコピペでできます。


ファイル編集

sudo su

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org

Elastic_IP=`curl http://169.254.169.254/latest/meta-data/public-ipv4`

cat << EOF >> /etc/vsftpd/vsftpd.conf
pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=
${Elastic_IP}
pasv_min_port=60001
pasv_max_port=60010
use_localtime=YES
force_dot_files=YES
EOF

sed -i -e "/^anonymous_enable/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^dirmessage_enable/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^#ascii_upload_enable/s/#//g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^#ascii_download_enable/s/#//g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^#chroot_local_user/s/#//g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^#chroot_list_enable/s/#//g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^tcp_wrappers/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^connect_from_port_20/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^xferlog_std_format/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
touch /etc/vsftpd/chroot_list



vsftpdを起動します


自動起動設定

sudo service vsftpd start

sudo chkconfig vsftpd on


次にFTPで接続する用のユーザーを作成します。


useradd

sudo su

useradd ftp-user
passwd ftpuser
"パスワードを聞かれるので任意のパスワードを設定する"

FTPを使ってftp-userで接続した場合、今回の設定だとユーザーのHOMEディレクトリより上位のディレクトリへはアクセスが出来ないようになっています。

ROOTディレクトリへアクセスする必要がある場合などは別途設定を行ってください。

chroot_list へユーザーを加えていけば大丈夫です。


以上で設定は完了です。

実際にFTP接続できるかテストしましょう


接続テスト

Macのターミナルでftpコマンドを打ち、EC2へ接続してみましょう。

ftp インスタンスのパブリックIP

"ユーザーを聞かれるのでftp-userと打鍵"
"パスワードを聞かれるのでパスワードを打鍵"

以上で接続が出来ます。


下記のスクリプトを作成し。実行権限を与えれば自動的にできます。


ftpconfig.sh

#!/bin/bash

sudo yum install vsftpd -y
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org
Elastic_IP=`curl http://169.254.169.254/latest/meta-data/public-ipv4`
sudo sh -c "cat << EOF >> /etc/vsftpd/vsftpd.conf
pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=
${Elastic_IP}
pasv_min_port=60001
pasv_max_port=60010
use_localtime=YES
force_dot_files=YES
EOF"

sudo sed -i -e "/^anonymous_enable/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sudo sed -i -e "/^dirmessage_enable/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sudo sed -i -e "/^#ascii_upload_enable/s/#//g" /etc/vsftpd/vsftpd.conf
sudo sed -i -e "/^#ascii_download_enable/s/#//g" /etc/vsftpd/vsftpd.conf
sudo sed -i -e "/^#chroot_local_user/s/#//g" /etc/vsftpd/vsftpd.conf
sudo sed -i -e "/^#chroot_list_enable/s/#//g" /etc/vsftpd/vsftpd.conf
sudo sed -i -e "/^tcp_wrappers/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sudo sed -i -e "/^connect_from_port_20/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sudo sed -i -e "/^xferlog_std_format/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sudo touch /etc/vsftpd/chroot_list
sudo service vsftpd start
sudo chkconfig vsftpd on

ユーザーの作成は手動で設定してください。



追記

ユーザー毎の設定をします。

/etc/vsftpd/user_conf内にユーザー名のファイルを作成し、細かい指定を行います。


ユーザーのルートディレクトリを/home以下から変更

local_root=/Pathを指定する/


セキュリティ上、chroot_listでFTP使用しないユーザーは弾くように書いておくこと。