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で接続する用のユーザーを作成します。
sudo su
useradd ftp-user
passwd ftpuser
"パスワードを聞かれるので任意のパスワードを設定する"
FTPを使ってftp-userで接続した場合、今回の設定だとユーザーのHOMEディレクトリより上位のディレクトリへはアクセスが出来ないようになっています。
ROOTディレクトリへアクセスする必要がある場合などは別途設定を行ってください。
chroot_list へユーザーを加えていけば大丈夫です。
以上で設定は完了です。
実際にFTP接続できるかテストしましょう
###接続テスト
Macのターミナルでftpコマンドを打ち、EC2へ接続してみましょう。
ftp インスタンスのパブリックIP
"ユーザーを聞かれるのでftp-userと打鍵"
"パスワードを聞かれるのでパスワードを打鍵"
以上で接続が出来ます。
下記のスクリプトを作成し。実行権限を与えれば自動的にできます。
#!/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__内にユーザー名のファイルを作成し、細かい指定を行います。
local_root=/Pathを指定する/
セキュリティ上、chroot_listでFTP使用しないユーザーは弾くように書いておくこと。