Laravel ForgeでSFTPの設定をする

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

金井 泰樹のアバター 金井 泰樹 FUNBREW代表

FUNBREWの代表。
新卒からIT系の企業に勤め、SES、スマホアプリ開発、自社開発の会社で経験を積んで独立。
新卒時代にエンジニアとしてのキャリアを積むのに失敗し、その後に苦労した経験から、現在教育事業の立ち上げを準備中。
強みはウェブシステム開発全般と迅速なレスポンスです。

目次