CentOSでftpsをセットアップ(vsftpd)

ftpsとsftpどっちにしようかな？というところからスタートしました。
ググってみると、

ftps　約 644,000 件
sftp　約 8,930,000 件

sftpのほうがメジャーです。
今回は、Windowsクライアント向けに、tarやzipでなくフォルダを直接アップロードしたいという要件を抱えています。
なのであえてftpsにします。

sftpも共存させようかと思いましたが、そっちはscpで事足りそうなので保留にしました。
他の要件は以下のとおり。
・anonymous非公開
・chrootでユーザーのホームディレクトリのみ公開

## サーバー証明書
OpenSSLを使用してサーバー証明書を作成します。
OpenSSLは必ず**最新**にしておきましょう。

```bash:console
$ sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/pki/tls/certs/vsftpd.pem -out /etc/pki/tls/certs/vsftpd.pem
Generating a 2048 bit RSA private key
..................................................................................+++
.....................................................+++
writing new private key to '/etc/pki/tls/certs/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Sumidaku
Organization Name (eg, company) [Default Company Ltd]:yaminososhiki
Organizational Unit Name (eg, section) []: area6
Common Name (eg, your name or your server's hostname) []:myserver
Email Address []:xxxx@xxxx

$ ll /etc/pki/tls/certs/vsftpd.pem
-rw-r--r--. 1 root root 3144 Feb  0 00:00 /etc/pki/tls/certs/vsftpd.pem
```


##インストール
yumコマンドでインストールして、設定ファイルを編集します。

```bash:console
$ sudo yum install vsftpd
$ sudo vi /etc/vsftpd/vsftpd.conf
```

設定ファイル

```ini:vsftpd.conf
# NOに変更 anonymousユーザーを無効にします
anonymous_enable=NO

# コメントアウト　デフォルト（077）にして他のユーザーの読取を拒否
#local_umask=022

# アンコメント ASCIIモードを有効にします
ascii_upload_enable=YES
ascii_download_enable=YES

# コメントアウト（vsftpdデフォルトの077マスクで、ownerのみアクセスに）
#local_umask=022

# chrootを有効にして、homeディレクトリをルートにします。
# アンコメント
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

# ipv6,v4両方Listenします
listen=YES
listen_ipv6=YES

# 追記  ※私はよくwritableと間違ってしまいます。writeableです。
allow_writeable_chroot=YES

# 追記　フォルダごといけるようにします
ls_recurse_enable=YES

# ここからSSL設定を追記
# SSLを有効化
ssl_enable=YES
# 証明書の場所を指定します
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
# POODLEの件もあるので明示的にNO
ssl_sslv2=NO
ssl_sslv3=NO
# TLSを使います
ssl_tlsv1=YES
# ノンセキュアなFTPは使用させず、SSLを強制
force_local_data_ssl=YES
force_local_logins_ssl=YES

# ここからパッシブの設定を追記
pasv_address=公開しているホスト名
pasv_enable=YES

# PASVで使うポートの下限と上限を設定します。
# エフェメラルポートの範囲内です。setctlでport_rangeで変更していないか確認してください。
# $ sudo grep ip_local_port_range /etc/sysctl.conf
# デフォルト（設定なし）では32768〜61000
pasv_min_port=50021
pasv_max_port=50040
				
```
##サービス起動
サービスを起動して、ftpがLISTENになっていることを確認します。

```bash:console
$ sudo systemctl enable vsftpd
$ sudo systemctl start vsftpd
$ sudo systemctl status vsftpd
vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
   Active: active (running) since 月 2015-00-00 00:00:00 JST; 56s ago
  Process: 2832 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 2833 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └2833 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 2月 00 00:00:00 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon...
 2月 00 00:00:00 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.
$ ss -lt | grep ftp
LISTEN     0      32                     :::ftp                     :::*
```

##Firewallでftpポート開放
認証アクセス用ポートとPASVポートを開放します。

```bash:console
$ sudo firewall-cmd --add-service=ftp --permanent
$ sudo firewall-cmd --add-port=50021-50040/tcp --permanent
$ sudo firewall-cmd --reload

設定を確認します
$ sudo firewall-cmd --list-service | grep ftp
dhcpv6-client ftp http ssh
$ sudo firewall-cmd --list-port | grep 50021
50021-50040/tcp 2222/tcp
```

##SELinux無効化
書き込み権限が付与できない場合はSELinuxの設定が必要です。
今回は一旦無効化しておきます。

```bash:console
sudo setenforce 0
sudo getenforce
Permissive
```

##Windowsから動作確認
Windows用のFTPS対応クライアントとして、FFFTPを使用してアクセスしてみます。もちろんFileZillaでもOK。

まずは「基本」タブで

* 「ホストの設定名」
* 「ホスト名（アドレス）」
* 「ユーザー名」
* 「パスワード／フレーズ」

をそれぞれ設定します。

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/69798/570f5052-e4bd-4f7a-8863-3cfd0cadf38c.jpeg)

「拡張」タブで「PASVモードを使う」をチェック、「ポート番号：21」にします。
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/69798/73a7189d-06ee-eb90-055d-581d9d8e59a1.jpeg)

FFFTPの新規ホストでホストの設定をします。

「暗号化」タブで
「FTPS(Explicit)で接続」にチェックを入れます。
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/69798/d384db57-c54a-d356-fe72-35b7a6f62e2e.jpeg)

設定は以上です。

早速接続してみます。
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/69798/0070b08f-40c6-627e-b148-be033b44d707.jpeg)

タイトルバーに「暗号化されています」と表示されています。

ファイルのアップロード、ダウンロードが可能か試してください。