Laravel ForgeでFTPを使いたくなり、調べたことをメモしています。
まずはForgeを使うにあたって、初期構築時に通知されたsudoパスワードを控えておきます。
またサーバーOSはUbuntu 22.04で検証しています。
SFTPの設定にあたっては、下記の記事を参考にさせていただきました。
https://chaingng.github.io/post/sftp_chroot/
サーバーのユーザーを作成する
まずはユーザーを作成します。
デフォルトではforgeユーザーしかいませんので、FTP専用のユーザーを作ります。
adduserコマンドではプロンプトが出てしまうので、以下のようにするとスクリプト化するときに便利です。
sudo adduser --disabled-password --gecos "" username
鍵の設定をする
作成したユーザーをSSHでアクセスできるように鍵の設定をします。
sudo mkdir /home/username/.ssh
sudo touch /home/username/.ssh/authorized_keys
authorize_keysに公開鍵を登録しましょう。
ここまでで、sshコマンドを使ってログインができるようになります。
SFTPの設定をする
chrootを利用するため、新しく作成したホームディレクトリの所有権をrootに変更します。
またパーミッションの変更を行います。
sudo chown root:root /home/username
sudo chmod 655 /home/username
今回はSFTPを使いたいので、SSHでアクセスできないようにします。
/etc/ssh/sshd_config で次のように追記します。
Match User username
ChrootDirectory /home/%u
ForceCommand internal-sftp
sshdの設定を反映させます。
sudo systemctl restart sshd
SSHで接続できないことを確認します。
This service allows sftp connections only.
Connection to xxx.xxx.xxx.xxx closed.
Filezillaなどを使って、SFTPでログインできることを確認します。
静的ファイルディレクトリを設定する
まずはLaravelのpublicフォルダにディレクトリを作成します。
次の例ではlpというディレクトリを作成して、新しいユーザーの所有権に変更しています。
mkdir /home/forge/your_laravel_app/public/lp
sudo chown username.username /home/forge/your_laravel_app/public/lp
FTPソフトから見えるようにするため、新しいユーザーのホームに空のディレクトリを作り、そこに先ほどLaravel側に作成したディレクトリをマウントをします。
sudo mkdir /home/username/lp
sudo mount --bind /home/forge/your_laravel_app/public/lp /home/username/lp