CentOS7でFTPサーバ構築してみた
はじめに
こんにちは、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の面白そうな対戦カードも発表されていたので、来月観に行こうかどうしようか迷っています。