如何在 Ubuntu 22.04 上安装 SFTPGo
在此页
- 先决条件
- 设置 UFW 防火墙
- 在 Ubuntu 22.04 上安装 SFTPGo
- 完成 SFTPGo 安装
- v2.3.0 中的新功能
- 群组
- 外部股份
- 品牌推广
- OpenID 连接
- 顶点
- 地理 IP 过滤
- 基于 shell 模式限制文件和目录
SFTPGo 是一款免费、开源、功能齐全且高度可配置的 SFTP 服务器,具有可选的 HTTP/S、FTP/S 和 WebDAV 支持。
支持多种存储后端:本地文件系统、加密本地文件系统、S3(兼容)对象存储、谷歌云存储、Azure Blob 存储、其他 SFTP 服务器。GitHub 项目页面上详细描述了所有支持的功能。
SFTPGo 适用于许多操作系统,包括 Linux、Windows、macOS、FreeBSD。
在本教程中,您将学习如何在 Ubuntu Ubuntu 22.04 系统上安装 SFTPGo,并探索 v2.3.0 中引入的主要新功能。先决条件
- Ubuntu 服务器 22.04。
- 具有 sudo 权限的非根用户。
设置 UFW 防火墙
出于安全原因,建议在您的系统中安装和配置 UFW 防火墙。首先,使用以下命令安装 UFW 防火墙:
sudo apt install ufw -y
SFTPGo 使用以下默认配置的 TCP 端口:
- SFTP 服务为 2022。
- 8080 用于 Web 管理用户界面。
我们还需要允许 OpenSSH 端口用于服务器管理。
使用以下命令允许所有必需的端口:
sudo ufw allow OpenSSH
sudo ufw allow 2022/tcp
sudo ufw allow 8080/tcp接下来,使 UFW 防火墙在系统重启后启动:
sudo ufw enable
检查状态:
sudo ufw status
您将获得以下输出:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2022/tcp ALLOW Anywhere
8080/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
2022/tcp (v6) ALLOW Anywhere (v6)
8080/tcp (v6) ALLOW Anywhere (v6)在 Ubuntu 22.04 上安装 SFTPGo
您可以从其 PPA 安装 SFTPGo。
从添加 PPA 开始:
sudo add-apt-repository ppa:sftpgo/sftpgo
sudo apt update接下来安装 SFTPGo:
sudo apt install sftpgo
安装后 SFTPGo 应该已经以默认配置运行并配置为在启动时自动启动,使用以下命令检查其状态:
systemctl status sftpgo
完成 SFTPGo 安装
现在,打开您的网络浏览器并使用以下 URL 访问 SFTPGo 安装向导:\http://<您的服务器 ip/主机名:8080>/\。
您将被重定向到以下页面:提供您的管理员用户名和密码,然后单击“创建管理员”按钮。
新创建的管理员将自动登录,因此您可以创建 SFTPGo 用户。有关创建用户的更多详细信息,您可以查看入门指南。
v2.3.0 中的新特性
让我们在下一节中探讨 v2.3.0 中引入的主要新功能。
团体
使用组可以简化多个 SFTPGo 用户的管理:您可以将设置分配给一个组,而不是多次分配给每个单独的用户。
SFTPGo 支持两种类型的组:
- 主要群体
- 次要群体
用户可以是主要组和许多次要组的成员。根据组类型的不同,设置的继承方式也不同。
您可以查阅官方文档找到更多详细信息。让我们在这里看一些用法示例。
假设您有以下需求:
- 每个用户都必须限制在本地主目录中,其中包含用户名作为路径的最后一个元素,例如 /srv/sftpgo/data/
- 对于每个用户,单个文件的最大上传大小必须限制为 1GB
- 每个用户必须在路径 /s3
中有一个可用的 S3 虚拟文件夹,并且每个用户只能访问 S3 存储桶的指定“前缀”。它不能访问其他用户文件 - 每个用户必须在路径 /shared 中有一个可用的 S3 虚拟文件夹。这是与其他用户共享的文件夹
- 一组用户只能下载和列出 /shared 路径中的内容,而另一组用户具有完全访问权限
我们可以通过定义两个组来轻松满足这些要求。
在 SFTPGo WebAdmin UI 中,单击“文件夹”,然后单击“+”图标。
创建一个名为“S3private”的文件夹。
将存储设置为“AWS S3(兼容)”并填写所需参数:- 桶名
- 地区
- 凭证:访问密钥和访问秘密
重要的部分是“Key Prefix”,将其设置为 users/%username%/。
\Key Prefix\ 限制对指定存储桶子文件夹的访问。
占位符 \%username%\ 将替换为关联的用户名。创建另一个名为 \S3shared\ 的文件夹,其设置与 \S3private\ 相同,但这次将 \Key Prefix\ 设置为 shared/。
\Key Prefix\ 没有占位符,因此文件夹将在不会根据关联用户更改的静态路径上运行。现在单击“组”,然后单击“+”图标并添加一个名为“主要”的组。
将“主目录”设置为 /srv/sftpgo/data/%username%。
和以前一样,占位符 \%username%\ 将替换为关联的用户名。
将这两个虚拟文件夹添加到该组并将“最大文件上传大小”设置为 1073741824 字节 (1GB)。
添加一个新组并将其命名为“SharedReadOnly”,在 ACL 部分中设置对 /shared 路径的权限,以便授予只读访问权限。
组设置现已完成。
我们现在可以创建我们的用户并将主要组设置为“主要”。
对于需要对 /shared 路径进行只读访问的用户,我们还必须将 \SharedReadOnly\ 设置为辅助组。单击“用户”,然后单击“+”图标并添加名为“user1”的用户。
此用户符合上述限制并具有对 /shared 路径的完全访问权限。
现在创建符合上述限制并且对 /shared 路径具有只读访问权限的 \user2\。
您还可以使用模板功能同时创建多个用户。
只需设置用户名、凭据和组成员身份。
现在您可以使用任何 SFTP 客户端(如 FileZilla、WinSCP 等)登录并验证是否满足要求。
外部股份
与没有 SFTPGo 帐户的外部用户共享文件是一种常见的要求。在 v2.3.0 中改进了此功能。
支持以下共享模式:- 只读
- 只写
- 读写
让我们看看它们是如何工作的。
登录到 WebClient UI 并创建一个名为 \external_share\ 的新目录。将一些文件添加到新创建的目录中。
然后选择“external_share”文件夹并单击“共享”图标。
将出现“添加新共享”屏幕,选择“读取”范围。
可选地,您可以限制共享的使用次数,使用密码保护共享,通过源 IP 地址限制访问,设置自动到期日期。然后从共享列表中选择您刚刚创建的共享并单击“链接”图标。将出现一个弹出窗口,其中包含有关如何使用共享的说明。
您可以将共享内容下载为单个 zip 文件,也可以浏览它们并逐个文件下载。
您可以复制这些链接并将它们发送给外部客户。如您在以下屏幕中所见,将显示指向可浏览共享的链接。
现在,编辑共享并将范围更改为“写入”。
共享的链接将显示以下屏幕。因此您的外部用户可以上传文件,但他们无法浏览或下载共享内容。
如果您想防止覆盖现有文件,您可以使用标准的 SFTPGo 按目录权限。再次编辑共享并将范围更改为“读/写”。
共享的链接将显示以下屏幕。所以现在外部用户可以浏览、下载和添加新文件到共享目录。
品牌推广
可以自定义 SFTPGo 网络用户界面以匹配您的品牌。这是 /etc/sftpgo/sftogo.json 中的相关配置部分:
"branding": {
"web_admin": {
"name": "",
"short_name": "",
"favicon_path": "",
"logo_path": "",
"login_image_path": "",
"disclaimer_name": "",
"disclaimer_path": "",
"default_css": "",
"extra_css": []
},
"web_client": {
"name": "",
"short_name": "",
"favicon_path": "",
"logo_path": "",
"login_image_path": "",
"disclaimer_name": "",
"disclaimer_path": "",
"default_css": "",
"extra_css": []
}
}查看 WebAdmin 登录屏幕。
默认的“名称”为“SFTPGo WebAdmin”,因此页面标题为“SFTPGo WebAdmin - 登录”。
默认的“短名称”为“WebAdmin”,因此登录名页面显示 \WebAdmin -\。
您可以通过设置 \favicon_path\ 来自定义 favicon,通过设置 \login_image_path\ 来自定义左侧的图像。
如果您设置\disclaimer_name\ 和 \disclaimer_path\,一个新链接将出现在登录页面的底部。您可以将其用于法律免责声明或其他任何内容。您可以通过设置 \logo_path\ 和 \short_name\ 为登录用户自定义页面左上角的徽标和标签。
SFTPGo 使用出色的 SB Admin2 主题。如果您想对主题进行一些小的更改,您可以将 \extra_css\ 设置为指向您的自定义 CSS 文件的路径。
另一方面,如果您重建 SB Admin 2 CSS,您可以将 \default_css\ 设置为自定义 CSS 的路径。这样我们就可以避免加载默认主题,然后用您的更改覆盖它。所有配置的路径(favicon_path、logo_path 等)都必须相对于“static_files_path”。
在 Linux 上,默认的“static_files_path”是 /usr/share/sftpgo/static,例如,您可以创建一个“branding”目录,并将您的自定义资源放在那里。
例如,您可以将 favicon 复制到 /usr/share/sftpgo/static/branding/favicon.ico,并将“favicon_path”设置为 /branding/favicon.ico。您可以使用环境变量覆盖任何配置选项,例如,可以使用 SFTPGO_HTTPD__BINDINGS__0__BRANDING__WEB_ADMIN__FAVICON_PATH 环境变量设置网络管理图标路径。
可以在此处找到有关使用环境变量配置 SFTPGo 的更多详细信息。更改配置文件后,您需要重新启动 SFTPGo 服务以应用更改。
sudo systemctl restart sftpgo.service
OpenID 连接
如果您有现有的身份提供者,它可能支持 OpenID Connect 标准。
您现在可以将您的身份提供者用户映射到 SFTPGo 管理员/用户,这样您就可以使用您的身份提供者登录到 SFTPGo WebClient 和 WebAdmin UI。
SFTPGo 用户也可以通过定义预登录挂钩在 OpenID 连接成功登录后自动创建。您可以配置令牌声明字段以供登录前挂钩使用,然后在挂钩内创建/更新 SFTPGo 用户时实现您自己的自定义逻辑。
SFTPGo 官方文档解释了将 SFTPGo 与 Keycloak 集成的步骤。其他身份提供者,如 Google Identity、Azure Active Directory、Auth0、OneLogin 已通过 SFTPGo 社区测试并已确认可以使用。
一般来说,任何实施 OpenID Connect 发现规范的 OpenID Connect 身份提供者都应该可以工作。
ACME
SFTPGo 具有内置的 ACME(自动证书管理环境),因此您可以轻松地为 SFTPGo Web UI 和 REST API、WebDAV 服务和 FTP 服务获取和更新免费的 Lets encrypt TLS 证书。
获取 Lets Encrypt 证书涉及解决由 ACME(自动证书管理环境)服务器发出的域验证挑战。此质询验证您对您尝试为其获取证书的域的所有权。存在不同的挑战类型,SFTPGo 支持“HTTP-01”和“TLS-ALPN-01”挑战类型。
为了能够使用 ACME 协议,您需要一个有效的域名指向您的服务器 IP。
让我们看一个示例配置,我们做出以下假设:
- 我们需要 \sftpgo.com\ 域的 TLS 证书
- 我们有一个现有的 Web 服务器已经在 \80\ 端口上为 \sftpgo.com\ 域运行,Web 根路径是 /var/www/sftpgo.com
打开SFTPGo配置文件/etc/sftpgo/sftpgo.json,搜索\acme\部分,修改如下:
"acme": {
"domains": ["sftpgo.com"],
"email": "<you email address here>",
"key_type": "4096",
"certs_path": "/var/lib/sftpgo/certs",
"ca_endpoint": "https://acme-v02.api.letsencrypt.org/directory",
"renew_days": 30,
"http01_challenge": {
"port": 80,
"proxy_header": "",
"webroot": "/var/www/sftpgo.com"
},
"tls_alpn01_challenge": {
"port": 0
}
}确保 \sftpgo\ 用户可以写入 /var/www/sftpgo.com 目录或使用适当的权限预先创建 /var/www/sftpgo.com/.well-known/acme-challenge 目录.
通过运行以下命令注册您的帐户并获取证书:
sudo -E su - sftpgo -m -s /bin/bash -c 'sftpgo acme run -c /etc/sftpgo'
完毕!从现在开始,SFTPGo 服务将负责为配置的域自动续订证书。
证书默认存储在 /var/lib/sftpgo/certs 目录中。您现在可以配置 SFTPGo 服务以使用这些证书。
例如,对于 Web UI,更改 SFTPGo 配置文件 /etc/sftpgo/sftpgo.json 如下:"httpd": {
"bindings": [
{
"port": 9443,
"address": "",
"enable_web_admin": true,
"enable_web_client": true,
"enable_https": true,
"certificate_file": "/var/lib/sftpgo/certs/sftpgo.com.crt",
"certificate_key_file": "/var/lib/sftpgo/certs/sftpgo.com.key",
.....重新启动 SFTPGo 服务以应用更改:
sudo systemctl restart sftpgo.service
您可以用类似的方式为其他服务启用 TLS。
Geo-IP过滤
SFTPGO Geo-IP 过滤插件允许根据客户端 IP 地址的地理位置接受/拒绝连接。
该插件可以读取 MaxMind GeoIP2 数据库。您需要下载 MMDB 格式的国家/地区数据库。
让我们看一个示例配置。
我们做出以下假设:- Geo-IP过滤插件位于/usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64路径
- 国家数据库位于 /var/lib/sftpgo/GeoLite2-Country.mmdb 路径
- 我们只想允许来自意大利的连接
打开 SFTPGo 配置文件 /etc/sftpgo/sftpgo.json,搜索 \plugins\ 部分并进行如下更改:
"plugins": [
{
"type": "ipfilter",
"cmd": "/usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64",
"args": ["serve", "--db-file", "/var/lib/sftpgo/GeoLite2-Country.mmdb", "--allowed-countries", "IT"],
"sha256sum": "",
"auto_mtls": true
}
]重新启动 SFTPGo 服务以应用更改:
sudo systemctl restart sftpgo.service
完毕!
当来自被拒绝国家的连接被拒绝时,在 SFTPGo 日志中你会看到类似这样的内容:
{"level":"debug","time":"2022-06-02T14:05:48.616","sender":"plugins.ipfilter.sftpgo-plugin-geoipfilter-linux-amd64","message":"[DEBUG] country not allowed: ip=XXX.XX.XXX.XXX country=NL"}
其他 SFTPGo 插件可在此处获得。
基于 shell 模式限制文件和目录
SFTPGo 支持每个用户和每个目录的 shell 类模式过滤器:可以根据 shell 类模式允许、拒绝和可选地隐藏文件。
让我们看一些例子。
假设您要拒绝特定目录中所有具有 jpg 和 png 扩展名的文件。
选择要修改的用户,展开“ACLs”部分并添加一个类似 shell 的文件。模式限制。这样,带有 png 和 jpg 扩展名的文件将无法下载或上传,但如果已经存在,仍会在目录列表中可见。
您可以通过将策略设置为“隐藏”来隐藏它们。在 v2.3.0 中引入了“隐藏”策略。