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