[AWS] EC2でFTPを使いたい

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 インストールと設定](http://blog.genies.jp/2011/07/amazon-ec2-amazon-linux-vsftpd.html)

通りに設定。
vi /etc/vsftpd/vsftpd.conf　を編集します。

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

```sh:ファイル編集
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を起動します

```bash:自動起動設定
sudo service vsftpd start
sudo chkconfig vsftpd on

```

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

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

FTPを使ってftp-userで接続した場合、今回の設定だとユーザーのHOMEディレクトリより上位のディレクトリへはアクセスが出来ないようになっています。
ROOTディレクトリへアクセスする必要がある場合などは別途設定を行ってください。
__chroot_list__　へユーザーを加えていけば大丈夫です。

---
以上で設定は完了です。
実際にFTP接続できるかテストしましょう

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

```
ftp インスタンスのパブリックIP
"ユーザーを聞かれるのでftp-userと打鍵"
"パスワードを聞かれるのでパスワードを打鍵"
```

以上で接続が出来ます。

---

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

```bash: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使用しないユーザーは弾くように書いておくこと。