LightsailでSFTPを利用してWordpressだけメンテさせる

# はじめに
Lightsailで、Wordpressのコンテンツ制作を外部の会社さんに委託するにあたって～の続編です。
SFTPでWordpress配下のコンテンツメンテがしたい！ってことで、lightsailにSFTPを解放するための手順メモです。

# AWSさんのre:Postに掲載されてる手順

https://repost.aws/ja/knowledge-center/lightsail-create-sftp-user

SFTPしたいだけなら、上記の手順で、まったく問題ありませんでした。
※ 上記の掲載URLを見失いがちなので、メモ書き。。。

今回は、「SSH キーベースの認証」の方で設定しました。
※re:Postの記事が消えてしまうと困るので手順＆コマンドをメモ書き

# SFTP ユーザーのグループを作成

SFTP ユーザーのグループを作成します。このグループは、多くの異なる SFTP ユーザーの管理に役立ちます。この例では、グループ名は sftp_group です。名前は、任意のグループ名に変更できます。
```shell
sudo groupadd sftp_group
```
# SFTP ユーザー作成
ホームディレクトリを持つインスタンスでユーザーを作成します。このユーザーは SFTP タスクのみを実行し、SSH ログインシェルを持ちません。次の例では、sftp_user を任意のユーザー名に置き換えます。
```shell
sudo useradd -g sftp_group -m -d  /home/sftp_user -s /sbin/nologin sftp_user
```
# 公開キーの作成

＜参考＞

https://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/amazon-lightsail-managing-ssh-keys.html#create-a-custom-key-ssh-keygen

上記のページの、一部を手順として利用します。

lightsailのブラウザコンソール上から、下記のコマンドでキーを生成します。

```shell
ssh-keygen -t rsa
```

作ったキー（公開キー：次の手順で許可に追加、プライベート気：クライアント側に持って行って接続用に利用）が必要となります。

# SSH キーベースの認証
SSH キーベースの認証を使用している場合は、ユーザーの SSH ファイルを作成し、公開キーをファイルに追加する必要があります。これを行うには、以下を実行します。

ユーザーのホームディレクトリで、.ssh フォルダと authorized_keys ファイルを作成します。
```shell
sudo mkdir /home/sftp_user/.ssh
sudo touch /home/sftp_user/.ssh/authorized_keys
```
使用する SSH 公開キー（１個前の手順で作った物）を /home/sftp_user/.ssh/authorized_keys ファイルに追加します。

#  パーミッションの調整(その１)
次のコマンドを実行して、ユーザーのホームディレクトリの所有権と許可を変更します。
```shell
sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -R
sudo chown root:sftp_group /home/sftp_user/
sudo chmod 755 /home/sftp_user/ 
sudo chmod 700 /home/sftp_user/.ssh/
sudo chmod 600 /home/sftp_user/.ssh/authorized_keys
```
前述の例では、/home/sftp_user ディレクトリで許可 755 を使用し、所有権を root ユーザーに変更しています。これは、ディレクトリが chroot ディレクトリとして使用されるためです。パス名のすべてのコンポーネントは、他のユーザーまたはグループによる書き込みが不可となっているルート所有のディレクトリでなければならないことに注意してください。

#  sshdデーモンの設定

```shell
sudo vi /etc/ssh/sshd_config
```
Subsystem sftp /usr/libexec/openssh/sftp-server 行をコメントアウトして、Subsystem sftp 行を変更します。
```shell
# Subsystem sftp /usr/libexec/openssh/sftp-server
```
前述の行を次と置き換えます。
```shell
Subsystem sftp internal-sftp
```
SFTP ユーザーのアクセスを制限するディレクティブを追加します。次のディレクティブは、ファイルの末尾に追加する必要があります。
```shell
Match Group sftp_group
ChrootDirectory /home/%u
ForceCommand internal-sftp
```
前述の例では、ChrootDirectory ディレクティブを使用して SFTP ユーザーのルートディレクトリ (chroot jail) を指定しています。ユーザーが sftp_group に属するマッチブロックは、パス /home/%u をルートディレクトリとして使用します。文字 %u はユーザーを表します。ユーザーのルートディレクトリを変更できます。

ForceCommand internal-sftp ディレクティブは、インプロセス SFTP サーバーの使用を強制します。

#  パーミッションの調整(その２)
ユーザーが使用する chroot ディレクトリを作成します。ディレクトリ名 sftp_user、および uploads を、任意の名前でを置き換えます。

```shell
sudo mkdir /home/sftp_user/uploads
sudo chown sftp_user:sftp_group /home/sftp_user/uploads
```

確認
```shell
ls -ld /home
drwxr-xr-x 3 root root 23 Oct  6 15:17 /home

ls -ld /home/sftp_user
drwxr-xr-x 3 root sftp_group 21 Oct  6 15:17 /home/sftp_user

ls -ld /home/sftp_user/uploads/
drwxr-xr-x 2 sftp_user sftp_group 6 Oct  6 15:17 /home/sftp_user/uploads/
```

#  sshdデーモンの再起動
```shell
sudo systemctl restart sshd
```

#  Wordpress配下をSCP経由でメンテナンスできるようにする
mountをバイントオプション（-B）をつけて実行する。
```shell
sudo mkdir /home/sftp_user/uploads/wp-content
sudo chown sftp_user:sftp_group /home/sftp_user/uploads/wp-content
sudo mount -B /bitnami/wordpress/wp-content /home/sftp_user/uploads/wp-content
```


#  パーミッションの調整(その３)
lightsailデフォルトの、グループ権限は「daemon」なのでSFTP用ユーザをグループに加えておく。
```shell
sudo usermod -aG daemon sftp_user
```

# AWSの相談・お困りごとありましたら、、、

AWSの活用方法や、お困りごとの相談、随時、お仕事の受付しております。
AWSのLambda開発関連で、ライトな開発や、ちょっと、こんな事を自動化したい！等も、お気軽に問い合わせください。

https://www.cs-cloud-aid.com/