現場でFTP関連の開発を行った際に、ローカル環境(vagrant)でFTPのアップロード・ダウンロードのテストを行いたかったため、テスト用のFTPサーバーを構築しました。
ftp専用のユーザーを作成しログインできるようにしたかったが、ftpのログイン時のパスワードで530エラーになってしまい、原因がわからず、仕方なくvagrantユーザーをそのまま使うことに(ローカル環境でテストできればいいので今回は良しとする。。)
FTPサーバーの構築
vsftpdのインストール
$ vagrant ssh
$ sudo yum -y install vsftpd
vsftpd.confの設定
# 下記に設定ファイルがある
$ ls /etc/vsftpd
$ cd /etc/vsftpd
$ cp vsftpd.conf vsftpd.conf.bk #念の為バックアップを取っておく
$ sudo vi /etc/vsftpd/vsftpd.conf
下記で設定。
/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
connect_from_port_20=YES
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
# passiveモードで使いたいので
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100
# 特定のユーザーだけログインできるように
user_config_dir=/etc/vsftpd/vsftpd_user_conf
userlist_enable=YES
userlist_deny=NO
# 特定のユーザーにchrootを設定する
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
vsftpd_user_confの設定
$ cd /etc/vsftpd
$ sudo mkdir vsftpd_user_conf
$ sudo vi vsftpd_user_conf/vagrant
/etc/vsftpd/vsftpd_user_conf/vagrant
local_root=/home/vagrant #追加
user_listの設定
$ cd /etc/vsftpd
$ sudo vi user_list
/etc/vsftpd/user_list
vagrant #追加
chroot_listの設定
$ cd /etc/vsftpd
$ sudo vi chroot_list
/etc/vsftpd/chroot_list
vagrant #追加
vsftpdの起動
$ sudo service start vsftpd #起動
停止、再起動する場合は下記。
$ service stop vsftpd #停止
$ service restart vsftpd #再起動
FTPで接続できるかテスト
FTPコマンドが入ってなかったのでインストール。
$ sudo yum -y install ftp
接続できるか確認してみる。
$ ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:vagrant): vagrant
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
接続できました。
FTPSサーバーの構築
FTPSのテストを行いたい場合。
こちらの解説がわかりやすかったです。
http://ossfan.net/setup/vsftpd-02.html
vsftpdの再起動
$ sudo service vsftpd restart
FTPSで接続できるかテスト
再起動後、先ほどのFTPコマンドでログインしようとすると、530 Non-anonymous sessions must use encryption.
でエラーになるはずです。FTPSで接続するためにlftpコマンドを使います。
lftpコマンドのインストール
$ sudo yum -y install lftp
接続のテスト。
$ lftp vagrant@localhost
Password:
lftp vagrant@localhost:~>
接続できました。