FTPユーザーアカウントを作成しよう

開発ベンダー側で使用するFTP用のOSユーザを作って欲しいと依頼があった際、EC2上で作成するステップを記載します。 例えばインフラ側で構築して、コンテンツを載せるのは外部ベンダーが実施するなどの場合です。 chrootでルートディレクトリも制限する方法で作成します。

< 前提 >

環境:

・EC2を1台 ( OS: Centos7、Webサーバ: Apache2.4)

命名

FTPアカウント名(OSユーザ):app_user

・OSグループ:developer

・Webサイトのドキュメントルート:

(ステージング用)stg.sample.jp

(本番用)www.sample.jp

< 手順 >

1.OSのグループ作成、ユーザ作成

プライマリグループをdeveloper, サブグループをapp_userにする

# groupadd developer
# useradd app_user
# useradd -g developer app_user
# usermod -aG app_user app_user

以下となっていることを確認

# id app_user
uid=1000(app_user) gid=1000(developer) groups=1000(developer),1001(app_user)

2.鍵作成

鍵を作成する。ssh-keygenのタイミングでパスフレーズを設定すること。

$ sudo su - app_user
$ cd /home/app_user
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ ssh-keygen -t rsa

公開鍵をauthorized_keysに入れる

# cp -p id_rsa.pub authorized_keys
# chmod 600 authorized_keys
# cat id_rsa

ここで、表示された秘密鍵の内容をコピーしておきrootへスイッチ

3.ディレクトリ作成および権限設定

必要なディレクトリ作成と権限設定

# chown root.root /home/app_user
# cd /home/app_user
# mkdir stg.sample.jp
# mkdir www.sample.jp
# chown app_user.developer /home/app_user/stg.sampler.jp
# chown app_user.developer /home/app_user/www.sample.jp

4.マウントおよび/etc/fstabの編集

bind マウント実行

# mount --bind /var/www/html/stg.sample.jp /home/app_user/stg.sample.jp
# mount --bind /var/www/html/www.sample.jp /home/app_user/www.sample.jp

fstabの編集

# vim /etc/fstab

以下の内容を追記する

/var/www/html/stg.sample.jp /home/app_user/stg.sample.jp none bind 0 0
/var/www/html/www.sample.jp /home/app_user/www.sample.jp none bind 0 0

5.ファイル転送ユーザ設定(sshd設定)

sftpユーザ設定

# vim /etc/ssh/sshd_config

以下のようにMatch部分にユーザを指定してChroot設定を入れる。デフォルトのSubsystem sftp行はコメントアウトし、internal-sftp行を追加する。

#Subsystem sftp  /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp

Match User app_user
ChrootDirectory /home/app_user
ForceCommand internal-sftp

構文チェックとリロードで反映

# sshd -t
# systemctl reload sshd.service

6.FTP用セキュリティグループの作成にて指定IP接続許可

sftpの場合、22番ポートを許可しておく

7.確認作業

Filezillaにて、作成したアカウントのドキュメントルートが指定したもの(/home/app_user)になっている事、ドキュメントルートにファイルアップしたものが、マウント先にアップされる事を確認する。 Filezillaの場合は、鍵がppk形式である必要があるためフォーマットを変更すること。以下の手順のようにPuttygenで実施。

akabeko.me

< その他注意事項 >

コンテンツのファイルアップするだけではなくphp.iniやhttpd.confも開発側で編集したいという場合、SSH接続を許可する必要があるので、「5.ファイル転送ユーザ設定(sshd設定)」を実施しないこと。また、wheelグループを一時的にサブグループに追加し、sudo許可して渡してあげるのもあり。