内容
やること
・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