如何在 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 连接到您的服务器:bashssh forge@your_server_ip2. 使用 root 用户身份运行以下命令来创建一个新的系统用户:
bashsudo adduser sftp_user3. 您将被要求输入新用户的密码以及一些其他信息。请根据提示完成用户创建过程。## 限制用户的访问权限要限制用户的访问权限,我们需要修改 SSH 的配置文件。1. 使用以下命令编辑 SSH 配置文件:
bashsudo nano /etc/ssh/sshd_config2. 在文件中找到 `Subsystem sftp` 的行,并在其下方添加以下内容:
bashMatch 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 服务以使更改生效:
bashsudo service ssh restart## 创建 SFTP 用户的 SSH 密钥要使 SFTP 用户能够通过 SSH 密钥进行身份验证,我们需要为该用户创建一个 SSH 密钥对。1. 切换到您刚刚创建的系统用户:
bashsudo su - sftp_user2. 使用以下命令生成 SSH 密钥对:
bashssh-keygen -t rsa3. 您将被要求选择密钥的保存位置和设置一个密码。您可以选择使用默认值,或根据需要进行更改。4. 生成密钥对后,使用以下命令查看公钥:
bashcat ~/.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` 参数指定了用户的根目录,即用户将被限制在该目录中访问文件。
bashMatch 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 访问您指定的目录,但无法访问服务器的其他文件系统。希望本文对您有所帮助!如有任何问题或疑问,请随时向我们提问。