AWS FTP設定 (ユーザーの追加とセキュリティグループでIP制限をかける)

# 内容

## やること

・FTPユーザー追加
ftp接続のみのためのユーザーの想定のため、
ユーザーのホームディレクトリは作らず、ログインディレクトリを設定し、
また、それ以上の階層には移動できないように制限をかける。

・EC2のSecurity GroupsでIP制限をかけれるように設定

## 環境

FTPは既にインストール済みのec-2
※ec2のAMIは ```CentOS 7 (x86_64) - with Updates HVM``` を採択

# FTPユーザー追加

## FTPユーザー追加

awsにsshログイン後、まずはユーザー追加するコマンドを流します。

    useradd -d /var/www/html/app/hogeroot -M -p b2ZTi94W use-hoge

    -d /var/www/html/app/hogeroot
    作業ディレクトリの指定

    -s /sbin/nologin
    suできない。スーパーユーザー（root）になれないアカウント

    -M
ホームディレクトリを作らない

    -p b2ZTi94W
パスワード
※このオプションは、そのまま平文使えないっぽく、あとでパスワード設定し直ししてます。

## ユーザー追加の確認

    cat /etc/passwd

一番下に表示されています。

    use-hoge:x:1003:1003::/var/www/html/app/hogeroot:/bin/bash

これでも確認出来ます。

    id -a use-hoge

    uid=1003(use-hoge) gid=1003(use-hoge) groups=1003(use-hoge)

### ユーザー切り替え(失敗)

    [centos@ip-172-0-0-0 ~]$ su - use-hoge
    パスワード:
    su: 認証失敗
    [centos@ip-172-0-0-0 ~]$

パスワードの設定がだめだったようです。

## パスワード設定し直し

    sudo passwd use-hoge

    [centos@ip-172-0-0-0 ~]$ sudo passwd use-hoge
    ユーザー use-hoge のパスワードを変更。
    新しいパスワード:
    新しいパスワードを再入力してください:
    passwd: すべての認証トークンが正しく更新できました。
    [centos@ip-172-0-0-0 ~]$

これでログインできる

    [centos@ip-172-0-0-0 ~]$ su - use-hoge
    パスワード:
    最後の失敗ログイン: 2017/12/19 (火) 01:24:00 UTC日時 pts/3
    最後の正しいログインの後に 3 回の失敗ログインの試行があります
    -bash-4.2$

## 現在のFTPの設定の確認

    [centos@ip-172-0-0-0 ~]$ sudo cat /etc/vsftpd/vsftpd.conf
    # Configuration file created by Chef
    # Manual changes to this file will be overwritten

    anonymous_enable=YES
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    [centos@ip-172-22-0-205 ~]$

こんなふうになっています。

ホームディレクトリの設定をする

    mkdir /etc/vsftpd/user_conf
    vi /etc/vsftpd/user_conf/use-hoge

    [centos@ip-172-0-0-0 ~]$ sudo cat /etc/vsftpd/user_conf/use-hoge
    local_root=/var/www/html/app/hogeroot
    [centos@ip-172-22-0-205 ~]$

confファイルはデフォではsudoユーザでも書き込みできないので、権限を与える

    chmod 700 /etc/vsftpd/vsftpd.conf

まずこれを追加

    chroot_local_user=NO
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list

まず

    chroot_local_user=NO
    chroot_list_enable=YES

ローカルユーザーは全員chroot無し、
全ユーザーがホームディレィクトリより上層へアクセス可能になります。

    chroot_list_file=/etc/vsftpd/chroot_list

ここのリストに書かれるユーザーは、
自身のホームディレクトリよりも、上層ディレクトリにはアクセスできなくなります。

というわけで、
chroot_listを作成しましょう。

    vi /etc/vsftpd/chroot_list

    [centos@ip-172-0-0-0 ~]$ sudo cat /etc/vsftpd/chroot_list
    use-hoge
    [centos@ip-172-0-0-0 ~]$

これでOKです。

確認はローカルから下記で出来ます。

ftp XXX.XXX.XXX.XXX(IPアドレス)

→追加したユーザー名とパスワードを入れる

ftp>
このようになったら、lsで確認します。
ログインディレクトリや、cd ../ で上層階にいけるか、
ftp>put ファイル名(ローカルに置いてある)
で、実際にファイルが送られるかも確認出来ます。

と思いきや、こんなエラーが出現してしまいました

    500 OOPS: vsftpd: refusing to run with writable root inside chroot()

    local-Mac:hoge hoge$ ftp XXX.XXX.XXX.XXX
    Connected to XXX.XXX.XXX.XXX.
    220 (vsFTPd 3.0.2)
    Name (XXX.XXX.XXX.XXX:hoge): use-hoge
    331 Please specify the password.
    Password:
    500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    ftp: Login failed

confファイルに下記を追記すると直ります。

    allow_writeable_chroot=YES

# Security GroupsでIP制限をかけれるように設定

## Security Groupsの設定を有効にするために

セキュリティグループの設定の前に

/etc/vsftpd/vsftpd.confに下記を追加することで、

    tcp_wrappers=NO

EC2のSecurity Groupsの設定を有効に出来ます。

## Security Groupsの設定

カスタム TCP ルール
プロトコルをTCP、
ポート番号は21にして、
IPを付与して完了です

###再起動

    systemctl status vsftpd
    systemctl restart vsftpd

## 最終的なvsftpd.confファイルの中身

    [centos@ip-172-0-0-0 ~]$ sudo cat /etc/vsftpd/vsftpd.conf
    # Configuration file created by Chef
    # Manual changes to this file will be overwritten

    anonymous_enable=YES
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=NO

    chroot_local_user=NO
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    allow_writeable_chroot=YES
    user_config_dir=/etc/vsftpd/user_conf
    [centos@ip-172-0-0-0 ~]$

おしまい

## 参考

https://qiita.com/Yuki_BB3/items/deeb84c360c6f3c37f51 (ec2セキュリティグループ関連)
https://qiita.com/sakuraya/items/b7e513a6add1dfc198b5 (ざっくりの流れ)
http://promamo.com/?p=3067
https://qiita.com/dogyear/items/289b314db9af42e15cfa
http://blog.sugulab.com/?p=1635
https://ex1.m-yabe.com/archives/2650
https://qiita.com/tukiyo3/items/5360e74eff80c894dfae