Laravel Forge + DigitalOcean - 添加仅对目录具有受限访问权限的 SFTP 用户

作者:编程家 分类: laravel 时间:2025-12-10

如何在 Laravel Forge + DigitalOcean 上添加仅对目录具有受限访问权限的 SFTP 用户

在使用 Laravel Forge 和 DigitalOcean 搭建网站时,有时我们需要为用户提供 SFTP 访问权限,但又不希望他们能够访问整个服务器的文件系统。本文将介绍如何在 Laravel Forge 和 DigitalOcean 上添加一个仅对特定目录具有受限访问权限的 SFTP 用户。

## 准备工作

在开始之前,您需要确保已经完成以下准备工作:

1. 已经安装并配置好 Laravel Forge。如果您还没有安装 Laravel Forge,请参考官方文档进行安装和配置。

2. 已经创建一个 DigitalOcean Droplet,并将其与 Laravel Forge 关联。如果您还没有创建 Droplet,请在 DigitalOcean 控制面板中创建一个新的 Droplet,并在 Laravel Forge 中将其关联。

## 创建一个新的系统用户

要为 SFTP 用户创建一个新的系统用户,我们需要通过 SSH 连接到服务器并执行一些命令。

1. 打开终端并使用 SSH 连接到您的服务器:

bash

ssh forge@your_server_ip

2. 使用 root 用户身份运行以下命令来创建一个新的系统用户:

bash

sudo adduser sftp_user

3. 您将被要求输入新用户的密码以及一些其他信息。请根据提示完成用户创建过程。

## 限制用户的访问权限

要限制用户的访问权限,我们需要修改 SSH 的配置文件。

1. 使用以下命令编辑 SSH 配置文件:

bash

sudo nano /etc/ssh/sshd_config

2. 在文件中找到 `Subsystem sftp` 的行,并在其下方添加以下内容:

bash

Match User sftp_user

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /path/to/your/directory

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

请将 `sftp_user` 替换为您刚刚创建的系统用户的用户名,并将 `/path/to/your/directory` 替换为您希望限制访问权限的目录路径。

3. 保存并关闭文件,然后重新启动 SSH 服务以使更改生效:

bash

sudo service ssh restart

## 创建 SFTP 用户的 SSH 密钥

要使 SFTP 用户能够通过 SSH 密钥进行身份验证,我们需要为该用户创建一个 SSH 密钥对。

1. 切换到您刚刚创建的系统用户:

bash

sudo su - sftp_user

2. 使用以下命令生成 SSH 密钥对:

bash

ssh-keygen -t rsa

3. 您将被要求选择密钥的保存位置和设置一个密码。您可以选择使用默认值,或根据需要进行更改。

4. 生成密钥对后,使用以下命令查看公钥:

bash

cat ~/.ssh/id_rsa.pub

将输出的公钥复制到剪贴板,稍后我们将在 Laravel Forge 中使用它。

## 在 Laravel Forge 中添加 SFTP 用户

现在我们将在 Laravel Forge 中添加一个新的 SFTP 用户,并将其与刚刚创建的系统用户关联。

1. 打开 Laravel Forge 控制面板,并导航到您的服务器。

2. 在服务器概览页面的左侧菜单中,选择 "SFTP Users"。

3. 单击 "Create SFTP User" 按钮,填写表单并粘贴您在上一步中复制的公钥。

4. 在 "Directory" 字段中,输入您希望限制访问权限的目录路径。请确保输入的路径与之前在 SSH 配置文件中设置的路径一致。

5. 单击 "Create SFTP User" 按钮以完成用户创建过程。

案例代码

在 SSH 配置文件中,我们使用 `Match User` 条件来指定仅对特定用户应用以下配置。`ForceCommand` 参数将用户的 SSH 会话强制转换为内部的 SFTP 会话,从而限制用户的访问权限。`ChrootDirectory` 参数指定了用户的根目录,即用户将被限制在该目录中访问文件。

bash

Match User sftp_user

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /path/to/your/directory

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

在 Laravel Forge 中,我们可以通过 "SFTP Users" 页面来创建和管理 SFTP 用户。在创建用户时,我们需要提供用户的公钥和限制访问权限的目录路径。

这样,我们就成功地在 Laravel Forge 和 DigitalOcean 上添加了一个仅对特定目录具有受限访问权限的 SFTP 用户。该用户将能够通过 SFTP 访问您指定的目录,但无法访问服务器的其他文件系统。

希望本文对您有所帮助!如有任何问题或疑问,请随时向我们提问。