【CentOS7.3】ESXiホスト上にFTPサーバを構築

# はじめに
ESXiホスト上に乗せたCentOS7.3にてFTPサーバを構築してみました。
その手順をこの記事を見ているあなたに向けてアウトプットします。

# そもそもFTPサーバとは？
FTPを使用してファイルの送受信を行うサーバのこと。

※詳細は下記リンクを参照
[【入門】FTPとは？通信・ソフトについて分かりやすく解説します](https://www.kagoya.jp/howto/network/ftp/)

# 環境

|  項目  |  説明  |
| ---- | ---- |
|  Hypervisor　|  ESXi6.7  |
|  OS  |  CentOS7.3  |

- OS

```bash
[root@tspweb01 ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@tspweb01 ~]#
```

**※最小限のインストール&下記設定を実施済み**
[【Linux】CentOS7.3のOSインストール後の基本設定](https://qiita.com/satton6987/items/1fccbe1db7ee04dfbaae)

# 構築手順

## FTP接続用ユーザー作成

まずはFTPで接続するためのユーザーを作成する。

```bash
[root@tspweb01 ~]# useradd ftp-user
[root@tspweb01 ~]# passwd ftp-user
ユーザー ftp-user のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[root@tspweb01 ~]#
```

## FTP用のディレクトリ作成

**①FTP用ディレクトリ作成**

```bash
[root@tspweb01 ~]# mkdir -p /var/www/ftp_dir
```

**②FTP用ディレクトリの所有者変更**
※`ftp-user`をディレクトリのオーナーにする。

```bash
[root@tspweb01 ~]# chown ftp-user /var/www/ftp_dir
```

**③FTP用ディレクトリの権限変更**

```bash
[root@tspweb01 ~]# chmod 755 /var/www/ftp_dir
```


**④FTP用ディレクトリの確認**

```bash
[root@tspweb01 ~]# ls -la /var/www | grep ftp
drwxr-xr-x.  2 ftp-user root   6  6月 19 21:47 ftp_dir
[root@tspweb01 ~]#
```

## FTPのインストール

- `vsftpd`インストール

```bash
yum -y install vsftpd
```

- `vsftpd`インストール確認

```bash
[root@tspweb01 ~]# rpm -qa | grep vsftpd
vsftpd-3.0.2-27.el7.x86_64
[root@tspweb01 ~]#
```

## FTPの設定

- FTP設定ファイルバックアップ

```bash
[root@tspweb01 ~]# cp -p /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_`date +'%Y%m%d'`
[root@tspweb01 ~]#
[root@tspweb01 ~]# ls -la /etc/vsftpd/
合計 40
drwxr-xr-x.  2 root root  116  6月 19 22:05 .
drwxr-xr-x. 77 root root 8192  6月 19 22:01 ..
-rw-------.  1 root root  125  4月  1 13:55 ftpusers
-rw-------.  1 root root  361  4月  1 13:55 user_list
-rw-------.  1 root root 5116  4月  1 13:55 vsftpd.conf
-rw-------.  1 root root 5116  4月  1 13:55 vsftpd.conf_20200619
-rwxr--r--.  1 root root  338  4月  1 13:55 vsftpd_conf_migrate.sh
[root@tspweb01 ~]#
```

- FTP設定

```bash:/etc/vsftpd/vsftpd.conf

# 以下の記載があることを確認
～
## userlist_fileで指定指定したユーザを有効にする（接続できる）
userlist_enable=YES

## アクセスファイル（/etc/hosts.allow, /etc/hosts.deny)をアクセス制御に利用しない
tcp_wrappers=NO

# 以下のコメントを外します。

## 設定したlocal_rootより上層ディレクトリへの移動を禁止
chroot_local_user=NO

##chrootを有効化する。
chroot_list_enable=YES

##chroot対象のユーザーリストファイルの場所を指定する。
chroot_list_file=/etc/vsftpd/chroot_list
```

```bash:/etc/vsftpd/vsftpd.conf
# 以下を追記

## パッシブモードの接続を許可する
pasv_enable=YES

## FTPサーバのIPアドレスを指定（パッシブモードで接続時）
pasv_address=[FTPサーバーのIP]
※上記のIPは固定となります。

## ポート指定 
pasv_min_port=60001
pasv_max_port=60010
※ポートはハイポートであれば特に指定はありません

## ドットから始まるファイルを含めた一覧を返す
force_dot_files=YES

## ファイル（またはディレクトリ）のタイムスタンプの表示をローカルタイムで表示する
use_localtime=YES

## ユーザー毎の設定ファイルの場所を指定する。
user_config_dir=/etc/vsftpd/user_conf
```

## FTP接続用ユーザの登録

```bash:/etc/vsftpd/chroot_list
ftp-user
```

## FTPユーザーログイン時のディレクトリ設定

ftp-userで接続したときのchrootが「/var/www/ftp_dir」になるように設定

```bash
mkdir /etc/vsftpd/user_conf
vi /etc/vsftpd/user_conf/ftp-user
```

```bash:/etc/vsftpd/user_conf/ftp-user
local_root=/var/www/ftp_dir
```

## サービス起動

```bash
systemctl start vsftpd
```

# 確認

Windowsの端末からコマンドプロンプトを起動し、接続確認を行う。
下記のようにFTPサーバーにログインできれば問題なし。

```
C:\Users\owner>ftp 192.168.0.41
192.168.0.41 に接続しました。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
ユーザー (192.168.0.41:(none)): ftp-user ← ユーザー名入力
331 Please specify the password. 
パスワード:　← パスワード入力
230 Login successful.
ftp>
```
※接続できない場合は、`firewalld`サービスが停止しているか確認。


ちなみに、ルートディレクトリの場所は以下となっている。

```bash
ftp> pwd
257 "/var/www/ftp_dir"
ftp>
```

# 参考記事
[【初心者向け】CentOS7でFTPサーバー構築](https://qiita.com/morih90/items/56aec95f25c0158848b0)