如何在 Ubuntu 22.04 上安装 SFTPGo如何在 Ubuntu 22.04 上安装 SFTPGo如何在 Ubuntu 22.04 上安装 SFTPGo如何在 Ubuntu 22.04 上安装 SFTPGo
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 22.04 上安装 SFTPGo

在此页

  1. 先决条件
  2. 设置 UFW 防火墙
  3. 在 Ubuntu 22.04 上安装 SFTPGo
  4. 完成 SFTPGo 安装
  5. v2.3.0 中的新功能
    1. 群组
    2. 外部股份
    3. 品牌推广
    4. OpenID 连接
    5. 顶点
    6. 地理 IP 过滤
    7. 基于 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 中引入了“隐藏”策略。

©2015-2025 艾丽卡 support@alaica.com