CentOS7でFTPサーバ構築してみた

CentOS7 on EC2でFTPサーバ(vsftpd)を構築して、接続できるところまでやってみました。

はじめに

こんにちは、AWS事業本部のニシヤマです。はいマスキュラー。

最近めっきり触ってなかったCentOS7でFTPサーバ(vsftpd)を構築してみたので紹介します。

やってみた

CentOS7はElastic IPをアタッチした状態で起動済みという前提で進めます。

SELinuxの無効化

今回はSELinuxは利用しないで構築するため、無効化します。

$ sudo sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
$ sudo setenforce 0
$ getenforce
Permissive

vsftpdインストール

CentOS7にSSHでログインしvsftpdインストールします。

$ sudo yum install -y vsftpd
$ sudo systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
$ sudo systemctl start vsftpd
$ sudo systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since 木 2019-06-06 08:21:40 UTC; 1s ago
Process: 4183 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 4184 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─4184 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

6月 06 08:21:40 centos7 systemd[1]: Starting Vsftpd ftp daemon...
6月 06 08:21:40 centos7 systemd[1]: Started Vsftpd ftp daemon.

vsftpdの設定

今回はPASVモードでデータ転送用ポートは10000〜10100番ポートを利用します。

$ sudo cp -p /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org
$ sudo vi /etc/vsftpd/vsftpd.conf
$ sudo cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=077
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=NO
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=NO
chroot_list_enable=YES
chroot_local_user=YES
chroot_list_file=/etc/vsftpd/chroot_list
user_config_dir=/etc/vsftpd/chroot_user_conf
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100
pasv_address=<Elastic IPのIPアドレス>

FTP用ユーザの設定

まずはFTP用ユーザを作成します。その後FTP用ユーザのみを接続許可するために/etc/vsftpd/user_listに記載をします。

$ sudo useradd ftpuser
$ sudo passwd ftpuser
$ sudo vi /etc/vsftpd/user_list
$ sudo cat /etc/vsftpd/user_list
ftpuser

chrootの設定

先ほど作成したftpuserユーザにはchroot先ディレクトリより上位には移動できないように制限するため、空のchroot_listファイルを作成します。もしchroot先より上位に移動させる場合はこのファイルにユーザ名を記載します。

$ sudo touch /etc/vsftpd/chroot_list

chroot先ディレクトリ/tmp/ftpuserを作成します。その配下に実際にファイルをアップロードするディレクトリ/tmp/ftpuser/ftp_rootを作成し、所有者をFTP用ユーザに変更します。

$ sudo mkdir /tmp/ftpuser
$ sudo mkdir /tmp/ftpuser/ftp_root
$ sudo chown ftpuser:ftpuser /tmp/ftpuser/ftp_root

/etc/vsftpd/chroot_user_confディレクトリにchrootするユーザ毎の設定ファイルを作成して、chroot先のパスを指定します。

$ sudo mkdir /etc/vsftpd/chroot_user_conf
$ sudo vi /etc/vsftpd/chroot_user_conf/ftpuser
$ sudo cat /etc/vsftpd/chroot_user_conf/ftpuser
local_root=/tmp/ftpuser

vsftpdの設定変更を適用

$ sudo systemctl restart vsftpd
$ sudo systemctl status vsftpd

セキュリティグループの設定変更

接続元のIPアドレスから制御用ポートの21番ポートと設定したデータ転送用ポートの10000〜10100番ポートを許可します。

FTPクライアントから接続

先ほど作成したユーザと設定したパスワードでFTPクライアントを利用してサーバに接続して繋がれば完了です。

はまったところ

今回の作業を行った際に、サーバ側の構築が完了したのでMacにFTPクライアントをインストールして、さて接続と試みてみましたがなぜかTimeoutが発生。原因調査のために同じIPアドレスで別のマシンから接続したり、別のEC2サーバを立ち上げ接続したり、あーでもないこーでもないと試行錯誤しましたが結局Macに導入されているセキュリティソフトが原因で、一時的に無効化したところ問題なく接続できました。最近手を動かしながらLinuxサーバのトラブルシューティングをしていなかったので予想以上に時間がかかってしまう結果となりました。

おわりに

送受信する情報を暗号化していないなどセキュリティの問題で、最近だとFTPを使う機会は減ってきていると思いますが、Linuxサーバ構築系の書籍ではだいたい記載されているんではないかと思う初歩的なソフトウェアで、久しぶりに構築をしてみるとなかなかスムーズに進まずいろいろ忘れているなーというのを感じました。 現在ではAWSに限らずクラウドのサービスを組み合わせることによって様々なシステムを作り上げることができますが、本記事のような基礎的な事も経験する事によってよりクラウドサービスの裏側がどのように動いているのかという理解が深まるのではないかと思います。

追記(2019/06/25)

セキュリティの観点からSELinuxの停止に関しては様々な意見があると思いますので、停止する際の判断は各システム、環境のポリシーに合わせて検討してください。

参考

https://linuxjm.osdn.jp/html/vsftpd/man5/vsftpd.conf.5.html

最近の格闘技

最近ブログをかけておらず格闘技ネタを発散できていなかったため、ちょっともやっとしてしまいました。ただ、6月3日には縁あって神戸で開催されたRIZIN.16を現地観戦する事になり今の日本の格闘技の盛り上がりを目の当たりにすることになりました。今までRIZINはTVやネット配信で見ることはありましたが初の現地で、入場セレモニーを見たときになぜか感極まって泣きそうになってしまったのは謎です。KOや一本で決まる試合も多く会場全体も大いに盛り上がっていたと思います。また、会場には今週末に堀口恭司選手のバンタム級タイトルマッチと、RENA選手の試合のあるBellatorの垂れ幕もありワクワクが止まりませんでした。途中7月に埼玉であるRIZIN.17の面白そうな対戦カードも発表されていたので、来月観に行こうかどうしようか迷っています。