首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在 Ubuntu 22.04 上安装 SFTPGo?

如何在 Ubuntu 22.04 上安装 SFTPGo?

原创
作者头像
网络技术联盟站
发布2022-06-12 22:34:42
发布2022-06-12 22:34:42
4.7K0
举报

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 权限的非 root 用户。

设置 UFW 防火墙

出于安全原因,建议在您的系统中安装和配置 UFW 防火墙。首先,使用以下命令安装 UFW 防火墙:

代码语言:txt
复制
sudo apt install ufw -y

SFTPGo 使用以下默认配置的 TCP 端口:

  • 2022 用于 SFTP 服务。
  • 8080 用于 Web 管理员用户界面。

我们还需要允许 OpenSSH 端口用于服务器管理。

使用以下命令允许所有需要的端口:

代码语言:txt
复制
sudo ufw allow OpenSSH
sudo ufw allow 2022/tcp
sudo ufw allow 8080/tcp

接下来,在系统重启后启用 UFW 防火墙:

代码语言:txt
复制
sudo ufw enable

检查状态:

代码语言:txt
复制
sudo ufw status

您将获得以下输出:

代码语言:txt
复制
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:

代码语言:txt
复制
sudo add-apt-repository ppa:sftpgo/sftpgo 
sudo apt update

接下来安装 SFTPGo:

代码语言:txt
复制
sudo apt install sftpgo

安装后 SFTPGo 应该已经使用默认配置运行并配置为在启动时自动启动,使用以下命令检查其状态:

代码语言:txt
复制
systemctl status sftpgo

完成 SFTPGo 安装

现在,打开您的 Web 浏览器并使用 URL 访问 SFTPGo 安装向导:“ http://<your server ip/hostname:8080>/”。

您将被重定向到以下页面:

提供您的管理员用户名和密码,然后单击“创建管理员”按钮。

新创建的管理员将自动登录,因此您可以创建 SFTPGo 用户。

有关创建用户的更多详细信息,您可以查看入门指南。

v2.3.0 中的新功能

让我们在接下来的部分中探讨 v2.3.0 中引入的主要新功能。

使用组可以简化多个 SFTPGo 用户的管理:您可以将设置一次分配给一个组,而不是多次分配给每个单独的用户。

SFTPGo 支持两种类型的组:

  • 主组
  • 次要组

用户可以是主要组和许多次要组的成员。根据组类型,设置的继承方式不同。

您可以通过查阅官方文档找到更多详细信息。

让我们在这里看一些用法示例。

假设您有以下要求:

  • 每个用户都必须限制在本地主目录中,该目录包含用户名作为路径的最后一个元素,例如/srv/sftpgo/data/<username>
  • 对于每个用户,单个文件的最大上传大小必须限制为 1GB
  • 每个用户必须在路径/s3<username>中有一个可用的 S3 虚拟文件夹,并且每个用户只能访问 S3 存储桶的指定“前缀”。它不能访问其他用户的文件
  • 每个用户必须在路径/shared中有一个可用的 S3 虚拟文件夹。这是与其他用户共享的文件夹
  • 一组用户只能下载和列出/shared路径中的内容,而另一组用户具有完全访问权限

我们可以通过定义两个组来轻松满足这些要求。

在 SFTPGo WebAdmin UI 中,单击“文件夹”,然后单击“+”图标。

创建一个名为“S3private”的文件夹。

将存储设置为“AWS S3(兼容)”并填写所需参数:

  • 存储桶名称
  • 地区
  • 凭据:访问密钥和访问密钥

重要的部分是“密钥前缀”,将其设置为users/%username%/

“密钥前缀”限制对指定存储桶子文件夹的访问。

占位符“ %username% ”将替换为相关的用户名。

使用与“S3private”相同的设置创建另一个名为“S3shared”的文件夹,但这次将“密钥前缀”设置为shared/。

“密钥前缀”没有占位符,因此文件夹将在不会根据关联用户更改的静态路径上运行。

现在单击“组”,然后单击“+”图标并添加一个名为“Primary”的组。

将“主目录”设置为/srv/sftpgo/data/%username%

和以前一样,占位符“ %username% ”将替换为关联的用户名。

将两个虚拟文件夹添加到该组,并将“最大文件上传大小”设置为 1073741824 字节 (1GB)。

添加一个新组并将其命名为“SharedReadOnly”,在 ACL 部分中设置/shared路径的权限,以便授予只读访问权限。

组设置现已完成。

我们现在可以创建我们的用户并将主要组设置为“主要”。对于需要对/shared

路径进行只读访问的用户,我们还必须将“SharedReadOnly”设置为辅助组。

单击“用户”,然后单击“+”图标并添加一个名为“user1”的用户。

此用户符合上述限制,并具有对/shared路径的完全访问权限。

现在创建符合上述限制并且对/shared路径 具有只读访问权限的“user2” 。

您还可以使用模板功能同时创建多个用户。

只需设置用户名、凭据和组成员身份。

现在您可以使用 FileZilla、WinSCP 等任何 SFTP 客户端登录并验证是否满足要求。

对外共享

在没有 SFTPGo 帐户的情况下与外部用户共享文件是一项常见要求。在 v2.3.0 中,此功能已得到改进。

支持以下共享模式:

  • 只读
  • 只写
  • 读和写

让我们看看它们是如何工作的。

登录到 WebClient UI 并创建一个名为“external_share”的新目录。

将一些文件添加到新创建的目录中。

然后选择“external_share”文件夹并单击“共享”图标。

将出现“添加新共享”屏幕,选择“读取”范围。

或者,您可以限制共享的使用次数,使用密码保护共享,通过源 IP 地址限制访问,设置自动到期日期。

然后从共享列表中,选择您刚刚创建的共享并单击“链接”图标。将出现一个弹出窗口,其中包含有关如何使用共享的说明。

您可以将共享内容下载为单个 zip 文件,也可以浏览它们并逐个文件下载。

您可以复制这些链接并将它们发送给您的外部客户。

如您在以下屏幕中所见,将显示可浏览共享的链接。

现在,编辑共享并将范围更改为“写入”。

共享链接将显示以下屏幕。

因此,您的外部用户可以上传文件,但不能浏览或下载共享内容。

如果要防止覆盖现有文件,可以使用标准 SFTPGo 每个目录权限。

再次编辑共享并将范围更改为“读/写”。

共享链接将显示以下屏幕。

所以现在外部用户可以浏览、下载和添加新文件到共享目录。

品牌推广

可以自定义 SFTPGo 网络用户界面以匹配您的品牌。以下是/etc/sftpgo/sftogo.json 中的相关配置部分:

代码语言:txt
复制
"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 - <SFTPGo 版本>”。

您可以通过设置“favicon_path”来自定义图标,通过设置“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,例如,您可以创建一个“品牌”目录并将您的自定义资源放在那里。

例如,您可以将 favicon 复制到/usr/share/sftpgo/static/branding/favicon.ico并将“favicon_path”设置为/branding/favicon.ico

您可以使用环境变量覆盖任何配置选项,例如,可以使用SFTPGO_HTTPD__BINDINGS__0__BRANDING__WEB_ADMIN__FAVICON_PATH 环境变量设置 Web 管理图标路径。

更改配置文件后,您需要重新启动 SFTPGo 服务以应用更改。

代码语言:txt
复制
sudo systemctl restart sftpgo.service

OpenID 连接

如果您有一个现有的身份提供者,它可能支持 OpenID Connect标准。

您现在可以将您的身份提供者用户映射到 SFTPGo 管理员/用户,这样您就可以使用您的身份提供者登录到 SFTPGo WebClient 和 WebAdmin UI。

SFTPGo 用户也可以通过定义pre-login hook在成功 OpenID 连接登录后自动创建。您可以将令牌声明字段配置为可用于登录前挂钩,然后在挂钩中创建/更新 SFTPGo 用户时实现您自己的自定义逻辑。

SFTPGo 官方文档解释了将 SFTPGo 与Keycloak集成的步骤。其他身份提供商,如 Google Identity、Azure Active Directory、Auth0、OneLogin 已通过 SFTPGo 社区的测试,并已确认可以正常工作。

一般来说,任何实现 OpenID Connect Discovery规范的 OpenID Connect 身份提供者都应该可以工作。

ACME

SFTPGo 内置 ACME(自动证书管理环境),因此您可以轻松获取和更新免费的 Let's encrypt TLS 证书,用于 SFTPGo Web UI 和 REST API、WebDAV 服务和 FTP 服务。

获取 Let's Encrypt 证书涉及解决 ACME(自动证书管理环境)服务器发出的域验证挑战。此挑战验证您对尝试获取证书的域的所有权。存在不同的挑战类型,SFTPGo 支持“HTTP-01”和“TLS-ALPN-01”挑战类型。

为了能够使用 ACME 协议,您需要一个带有服务器 IP 的有效域名。

让我们看一个示例配置,我们做出以下假设:

  • 我们需要“sftpgo.com”域的 TLS 证书
  • 我们已经在“sftpgo.com”域的端口“80”上运行了一个现有的 Web 服务器,并且 Web 根路径是/var/www/sftpgo.com

打开 SFTPGo 配置文件/etc/sftpgo/sftpgo.json,搜索“acme”部分,修改如下:

代码语言:txt
复制
"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 目录。

通过运行以下命令注册您的帐户并获取证书:

代码语言:txt
复制
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更改如下:

代码语言:txt
复制
"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 服务以应用更改:

代码语言:txt
复制
sudo systemctl restart sftpgo.service

您可以以类似的方式为其他服务启用 TLS。

地理 IP 过滤

SFTPGO Geo-IP 过滤插件允许根据客户端 IP 地址的地理位置接受/拒绝连接。

该插件可以读取 MaxMind GeoLite2和 GeoIP2数据库。您需要下载 MMDB 格式的国家数据库。

让我们看一个示例配置。

我们做出以下假设:

  • Geo-IP 过滤插件位于/usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64路径
  • 国家数据库位于/var/lib/sftpgo/GeoLite2-Country.mmdb路径
  • 我们只想允许来自意大利的连接

打开 SFTPGo 配置文件 /etc/sftpgo/sftpgo.json ,搜索“plugins”部分,修改如下:

代码语言:txt
复制
"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 服务以应用更改:

代码语言:txt
复制
sudo systemctl restart sftpgo.service

完毕!

在 SFTPGo 日志中,当来自被拒绝国家/地区的连接被拒绝时,您将看到如下内容:

代码语言:txt
复制
{"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 中引入的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先决条件
  • 设置 UFW 防火墙
  • 在 Ubuntu 22.04 上安装 SFTPGo
  • 完成 SFTPGo 安装
  • v2.3.0 中的新功能
    • 对外共享
    • 品牌推广
    • OpenID 连接
    • ACME
    • 地理 IP 过滤
    • 根据 shell 模式限制文件和目录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档