本页内容
- 准备工作
- 安装 sFTPGo
- 通过 DNF 安装
- 通过 RPM 安装
- 配置 Firewalld
- 配置 sFTPGo
- 配置 sFTPGo 用户
- 通过 SFTP 与 FileZilla 连接
- 通过 sFTPGo WebClient 访问
- 通过 Webdav 连接 sFTPGo
- 总结
sFTPGo 是一款高度可配置的 SFTP 服务器,还支持 HTTP/S、FTP/S 以及 WebDAV 等额外的安全协议。它允许你创建带有多种后端的 FTP 服务器,例如本地文件系统,以及 Amazon S3、Google Storage Engine、Azure Blob Storage 等第三方存储提供商。
FTP 提供了一种通过多种协议收发文件的安全方式。它支持虚拟文件夹,支持 SQLite、MariaDB、PostgreSQL 等数据库后端,提供 REST API,支持双因素认证,以及更多功能。
在本教程中,我们将在 Rocky Linux 服务器上使用现代化的 FTP 服务器软件 sFTPGo 创建一个安全的 FTP 服务器。你还将学习如何在 sFTPGo 上启用 Webdav。
准备工作
完成本教程需要满足以下要求:
- 一台 Rocky Linux 服务器——你可以使用 Rocky Linux v8 或 v9。
- 一个已启用 sudo/root 权限的非 root 用户。
- 一个指向服务器 IP 地址的域名——尤其是用于生产环境时。
安装 sFTPGo
sFTPGo 是一款现代化且功能完备的 FTP 服务器软件,支持 FTP/S、Webdav 和 HTTP/S 等多种安全协议。它还支持包括 PostgreSQL、MySQL 和 SQLite(默认)在内的多种后端数据库。
sFTPGo 还可以与多种后端集成,为用户提供文件服务,包括本地文件系统(可加密)、Google Cloud Storage、Azure Blob Storage、Amazon S3 等云存储服务。
在 Rocky Linux 服务器上有多种安装 sFTPGo 的方式。你可以选择最适合你部署环境的一种。
通过 DNF 安装
sFTPGo 为多个 Linux 发行版提供了自己的软件仓库,包括 Debian、Ubuntu、CentOS/RockyLinux/AlmaLinux。
在 Rocky Linux 上,你可以通过 DNF 包管理器安装 sFTPGo。
运行以下命令,将 sFTPGo 仓库添加到你的 Rocky Linux 服务器。
ARCH=`uname -m`
curl -sS https://ftp.osuosl.org/pub/sftpgo/yum/${ARCH}/sftpgo.repo | sudo tee /etc/yum.repos.d/sftpgo.repo
现在,通过下面的 dnf 命令更新并刷新你的软件包仓库。
sudo dnf update
软件包更新安装完成后,运行下面的 dnf 命令安装 sFTPGo 软件包。
sudo dnf install sftpgo
当提示确认安装时,输入 Y 并按回车键继续。

此外,如果提示你接受 sFTPGo 仓库的 GPG 密钥,再次输入 y。

sFTPGo 安装完成后,运行以下命令启动并启用 "sftpgo" 服务。这将运行 sFTPGo 服务,并使其在系统启动时自动运行。
sudo systemctl start sftpgo
sudo systemctl enable sftpgo
最后,运行以下 systemctl 命令验证 sFTPGo 服务。如果安装成功,你将看到 FTP 服务正在运行。
sudo systemctl status sftpgo

通过 RPM 安装
另一种在 Rocky Linux 服务器上安装 sFTPGo 的方式,是从 GitHub 仓库下载 sFTPGo 的 RPM 软件包,并通过 RPM 命令进行安装。
sFTPGo 为 Debian/Ubuntu 用户提供了 .deb 二进制软件包,为 CentOS/RockyLinux 用户提供了 .rpm 二进制软件包。
通过下面的 wget 命令下载 sFTPGo 的 rpm 文件。"VER" 变量表示 sFTPGo 软件包的最新版本。
在撰写本文时,sFTPGo 的最新版本为 v2.3.5。因此,你应当会在当前工作目录中看到新文件 "sftpgo-2.3.5-1.x86_64.rpm"。
VER=$(curl -s https://api.github.com/repos/drakkan/sftpgo/releases/latest|grep tag_name | cut -d '"' -f 4 |sed 's/v//g')
wget https://github.com/drakkan/sftpgo/releases/download/v$VER/sftpgo-$VER-1.x86_64.rpm
下载 sFTPGo 后,运行以下命令安装 RPM 文件 "sftpgo-2.3.5-1.x86_64.rpm"。
sudo rpm -Uvh sftpgo-2.3.5-1.x86_64.rpm
安装完成后,你将看到类似以下的输出:

接下来,运行下面的 systemctl 命令启动并启用 sFTPGo 服务。该服务应当正在运行,并将在系统启动时自动执行。
sudo systemctl enable sftpgo
sudo systemctl start sftpdgo
现在通过下面的 systemctl 命令验证 sFTPGo 服务。你应当看到 sFTPGo 服务正在你的 Rocky Linux 系统上运行。
sudo systemctl status sftpdgo

配置 Firewalld
sFTPGo 是一款可与多种协议配合使用的 FTP 服务器软件。这种灵活性使客户端能够使用自己偏好的应用程序来访问文件。
客户端可以通过 FileZilla 等 FTP 客户端访问文件,也可以通过安全的 HTTP/HTTPS 协议使用网页浏览器访问,或者使用文件管理器通过 Webdav 协议访问。
以下是你需要开放给客户端和管理员访问的一些 sFTPGo 端口。
Protocol Port Access via ----------------------------------- TCP 8080 HTTP/HTTPS TCP 2022 SFTP TCP 8090 Webdav
运行以下 firewall-cmd 命令,将 sFTPGo 端口添加到 firewalld。
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=8090/tcp
sudo firewall-cmd --permanent --add-port=2022/tcp
现在使用下面的命令重新加载防火墙规则。
sudo firewall-cmd --reload
最后,验证 sFTPGo 端口,确保端口已添加。
sudo firewall-cmd --list-ports
你应当看到 sFTPGo 的端口已添加。

配置 sFTPGo
安装完 sFTPGo 并配置好 Firewalld 后,你将对 sFTPGo 进行配置。这包括启用 HTTP/HTTPS、SFTP 和 WebDAV 等协议。此外,sFTPGo 通过 SSL 证书进行保护。
在配置 sFTPGo 之前,请确保你已准备好 SSL/TLS 证书。你可以使用 Let's Encrypt 提供的免费 SSL 证书。
使用 nano 编辑器修改 sFTPGo 默认配置文件 "/etc/sftpgo/sftpgo.json"。
sudo nano /etc/sftpgo/sftpgo.json
sFTPGo 默认已启用 SFTP,它将运行在 TCP 端口 2022 上。
找到 "webdavd" 选项,输入端口 "8090",启用 HTTP,然后输入 SSL 证书路径。此外,你还可以将 webdavd 协议的 IP 地址改为你的内网 IP 地址。
"webdavd": {
"bindings": [
{
"port": 8090,
"address": "",
"enable_https": true,
"certificate_file": "/etc/letsencryt/live/sftp.howtoforge.local/fullchain.pem",
"certificate_key_file": "/etc/letsencryt/live/sftp.howtoforge.local/privkey.pem",
"min_tls_version": 12,
"client_auth_type": 0,
"tls_cipher_suites": [],
"prefix": "",
"proxy_allowed": [],
"client_ip_proxy_header": "",
"client_ip_header_depth": 0
}
],
接下来,找到 "httpd" 选项,启用安全的 HTTPS 支持,然后输入 SSL 证书路径。如果你有多个 IP 地址,也可以指定 "httpd" 选项的 IP 地址。
"httpd": {
"bindings": [
{
"port": 8080,
"address": "",
"enable_web_admin": true,
"enable_web_client": true,
"enabled_login_methods": 0,
"enable_https": true,
"certificate_file": "/etc/letsencryt/live/sftp.howtoforge.local/fullchain.pem",
"certificate_key_file": "/etc/letsencryt/live/sftp.howtoforge.local/privkey.pem",
"min_tls_version": 12,
"client_auth_type": 0,
"tls_cipher_suites": [],
"proxy_allowed": [],
"client_ip_proxy_header": "",
"client_ip_header_depth": 0,
"hide_login_url": 0,
"render_openapi": true,
"web_client_integrations": [],
完成后保存文件并退出编辑器。
最后,通过下面的 systemctl 命令重启 sFTPGo 服务以使新更改生效。
sudo systemctl restart sftpgo
现在 sFTPGo 已经在 Rocky Linux 服务器上正常运行。你已为客户端启用了多种协议,包括 SFTP(默认启用)、WebDAV 和 httpd。所有这些协议也都通过 SSL 证书进行了保护。
配置 sFTPGo 用户
完成 sFTPGo 安装后,你必须通过运行在默认端口 8080 上的 "httpd" 协议来设置管理员用户。此外,你还将通过管理仪表盘在 sFTPGo 中创建一个新用户。
打开网页浏览器,访问你的 sFTPGo 安装的域名 URL(例如:https://sftp.howtoforge.local:8080/)。
在第一个界面中,系统会要求你为 sFTPGo 创建一个新管理员用户。输入管理员用户名和密码,然后点击 "创建管理员"。

现在你应当会看到 sFTPGo 的管理仪表盘。

接下来,你将为你的 sFTPGo 用户创建一个新组。
点击左侧的 "Groups"(组)菜单,输入新组名和描述,然后点击 "Submit"(提交)。在本示例中,你将创建一个名为 "manager" 的新组,并且你还可以添加额外的配置,例如 ACL(访问控制列表),并为每个组设置特定的磁盘配额和带宽。

组创建完成后,点击左侧的 "Users"(用户)菜单来创建一个新用户。
输入用户名、密码和所属组,然后点击 "Submit"(提交)继续。在本示例中,你将创建一个名为 "alice" 的新用户,其主组为 "manager"。

现在,你应当会在 sFTPGo 管理仪表盘上看到用户列表。

现在你已经创建了一个 sFTPGo 用户。接下来,了解用户如何通过多种客户端访问或上传文件到 sFTPGo,包括 sFTPGo WebClient(通过 httpd)、FileZilla(通过 SFTP),或使用文件管理器(通过 Webdav)。
通过 SFTP 与 FileZilla 连接
在第一个示例中,你将学习如何作为客户端通过 FileZilla 和 SFTP 协议连接到 sFTPGo 服务器。因此,在开始之前,请确保本地计算机上已安装 FTP 客户端 FileZilla。
现在打开 FileZilla 应用程序,点击 "File"(文件)菜单并选择 "Site Manager"(站点管理器)——或者你也可以直接按下 "Ctrl+S"。
点击 "New site"(新站点),输入用户名、密码,以及 SFTP 服务器的 IP 地址或域名和端口。
- 协议:SFTP - SSH 文件传输协议
- 主机:sftp.howtoforge.local
- 端口:2022
- 登录类型:正常
- 用户:alice
- 密码:YourPassword
点击 "Connect"(连接)以确认并连接到 SFTP 服务器。

现在系统会提示你确认 SFTP 服务器的证书,点击 "OK"(确定)进行确认。

通过 SFTP 协议连接后,你可以尝试将文件上传到你的 sFTPGo 服务器。下面的示例显示了通过 FileZilla 客户端将 ISO 文件上传到 sFTPGo 服务器。

通过 sFTPGo WebClient 访问
默认情况下,sFTPGo 通过运行在 "httpd" 端口 8080 上的 WebClient 为客户提供访问。借助 sFTPGo WebClient,你可以上传和管理文件,设置额外的双因素认证,并在 sFTPGo 服务器内于用户之间共享文件。
打开网页浏览器,使用 httpd 端口 "8080" 和类似如下的路径访问你的 sFTPGo 安装的域名(例如:https://sftp.howtoforge.local:8080/web/client/login)。你应当会看到客户端访问的登录页面。
输入用户名 "alice" 和密码,然后点击 "Login"(登录)。

如果用户名和密码正确,你应当会看到 sFTPGo 用户仪表盘。此外,你还可以看到之前通过 FileZilla 和 SFTP 刚刚上传的 ISO 文件。

你也可以通过 WebClient 上传文件,并通过 sFTPGo WebClient 添加额外的双因素认证或与其他用户共享文件。
通过 Webdav 连接 sFTPGo
要通过 WebDAV 协议连接,你可以使用计算机上的文件管理器。Windows 用户可以使用文件资源管理器(File Explorer);Linux 用户可以使用 Nautilus、Thunar 或 Dolphin;macOS 用户可以使用其自带的文件管理器。
你可以在所使用的文件管理器中使用 WebDAV 地址,例如 "davs://sftp.howtoforge.local:8090/"。"davs" 是 "dav" Webdav 协议的安全版本。

现在系统会提示你输入用户名和密码。输入用户 alice 及其密码,然后点击 "Connect"(连接)。

连接成功后,你应当会看到 Webdav 协议已添加到「网络」部分。在本示例中,你可以看到通过 SFTP 协议和 FileZilla 上传的 ISO 文件。

总结
在本教程中,你已经在 Rocky Linux 服务器上使用 sFTPGo 搭建了一个现代化且安全的 FTP 服务器。你还为 sFTPGo 配置了 SFTP、httpd 和 Webdav 等多种协议,并启用了安全连接。
通过本教程,你还学习了如何通过多种客户端应用程序连接到 sFTPGo 服务器:使用 FileZilla 配合 SFTP 协议、使用 sFTPGo WebClient 配合安全的 HTTPS 连接,以及使用文件管理器配合 Webdav。