最后更新:2022-07-02 11:57:09 手机定位技术交流文章
SFTPGo是一个完整的功能,高度可配置化,支持定制HTTP/S、FTP/S和WebDAV SFTP服务。它支持本地文件系统,加密本地文件系统,S3(兼容)对象存储,Google云存储,Azure Blob存储,各种存储格式,如SFTP。
通过SFTPGo,你可以基于HTTP/S构建,FTP/S,WebDAV SFTP文件协议云存储 服务器 ,当你创建用户时,能够定制多个用户权限,这包括限制访客的IP地址、上传和下载带宽、可以访问的特定文件类型、可以使用的文件协议、二次认证、最大数量的同步对话、可以使用的磁盘配额.. 多个权限设置等。
同时,用户可以轻松共享文件,甚至可以设置最多访问文件的次数,如果访问数超过无法访问文件的次数,等等。
本文基于Unraid系统,向读者介绍该服务的安装和使用。该工具在社区中没有描述,所以如果描述不正确,请纠正。
进入Unraid的APP应用程序存储器,直接搜索相应的Docker应用程序,选择安装来访问Docker的配置和安装接口:

Unraid商店的SFTPGo模板已经为我们配置了大部分参数,通常我们只需要修改 Share Access路径映射参数和 passive Mode IP变量参数。
共享访问:设置要映射在容器中的路径,用于访问SFTPGo的文件夹。
例如,在Unraid中,作者创建了一个名为sftpgo的共享文件夹,其绝对路径为
/mnt/user/sftpgo将它映射到/unraid路径中":

消极模式IP:设置内部网络的IP地址为Unraid:

在参数配置后,可以通过单击“应用”开始拖动图像并创建容器进行其他配置,无需修改。
安装后,输入 http://ip地址: 221 来访问WebUI接口(221端口是WebUI访问端口)。
初始安装完成后,登录页自动跳到/web/admin/setup的URL接口页,并请您创建系统管理员用户:

这里作者填入一个管理员帐户并点击创建管理员完成创建:

登录后,在左边的“状态”系统服务状态栏上点击显示当前系统服务状态:

从“状态”页面可以查看SFTPGo当前服务和功能的状况,这里共有六个项目,它们是 SFTP/SSH 、 FTP 、 WebDAV 、 Defender 、 Multi-factor authentication 和 Data provider 。其中第一个三个,分别是SFTP/SSH、FTP和WebDAV,显示当前的开放状态和被监视的端口号码等。所以当你需要使用文件传输协议时,你可以到这个接口查看相应的端口号码,以便进行访问。 以下为 Defender 、 Multi-factor authentication 和 Data provider 的简单描述:
以下内容在官方的Github项目中解释,但由于社区不能发布链接,请到项目并亲自搜索相应的内容。
Defender: Defender是SFTPGo的保安保护工具,用于SFTP、HTTP、FTP和WebDAV等服务。可以防止DoS攻击,自动锁定(IP、访问内容)也可以根据配置策略实现。
多因素认证:这指的是目前由SFTPGo打开的认证方法,SFTPGo支持多个认证方法,例如,二元认证,2FA, Keyboard Interactive Authentication, SSH certificate authentication等。它 还 为 用户 提供 了 对 某些 认证 方法 的 自己 定义 的 相应 方法 ;
数据提供者:数据库配置。SFTPGo支持PostgreSQL、MySQL和CockroachDB外部数据库,没有这些数据库的相应配置(如我们现在有),默认情况下,SQLite内部用于存储数据库的数据(在容器启动时自动创建)。所以如果你不想使用内置SQLite作为数据库,因此,您可以在多克配置中添加下列变量来链接到外部数据库:例如,您在Unraid上安装了Mariadb,然后可以添加下列变量:
SFTPGO_DATA_PROVIDER__DRIVER:数据库类型,设置为"mysql";
SFTPGO_DATA_PROVIDER__NAME:数据库名称,要求您先在数据库中创建它。例如,如果您在MySQL中创建了一个名为"sftpgo"的数据库,那么填入"sftpgo";
SFTPGO_DATA_PROVIDER__HOST:输入数据库的IP地址;
SFTPGO_DATA_PROVIDER__PORT:数据库端口;
SFTPGO_DATA_PROVIDER__USERNAME:数据库用户名;
SFTPGO_DATA_PROVIDER__PASSWORD:数据库用户密码;

我们需要做的第一个步骤是创建一个本地存储器,然后单击“文件夹”进入配置界面:


在此,作者创建了一个叫做共享的本地后端存储文件夹,该文件夹在容器中的/unraid文件夹下映射(注意当存储格式使用Local时需要绝对路径):

存储后端的描述:

本地:即本地存储,也是最常用的格式,可以将命名空间文件夹作为存储目录;
Local encrypted(Data At Rest Encryption,静态数据加密:SFTPGo通过其cryptfs虚拟文件系统支持静态数据加密,在这种模式下,SFTPGo在上传和/或下载时可透明地加密和解密数据(来自本地磁盘),确保服务器端的静态文件总是加密.
需要注意的是,如果你选择这种存储方式,所以当你设置你的本地文件夹时,这个文件夹不能包含文件,也就是说,您需要为使用这种加密的存储类型创建一个空的文件夹,否则系统将试图解密未被最初加密的现有文件,并且会失败;
AWS S3/Google Cloud Storage/Azure Blob Storage: 亚马逊 谷歌和 微软 有关存储服务,如云存储,这里就不做介绍了,如果你有兴趣,你可以去描述;
SFTP:支持存储作为后端的其他SFTP服务器的连接,但这是一个简短的介绍,请参阅官方文件。
在SFTPGo中,有许多可配置的用户权限配置选项,并且这个部分需要花费较长的时间来介绍。
在设置后端存储器后,我们需要创建相应的用户,并给用户具体权限使用我们构建的SFTPGo服务。


公共钥匙:非强制性,但如果您不填写上述帐户密码,然后您必须在这里填写公共钥匙,二选一。SSH登录的公共键,相应的公共和私钥可以在Linux上通过ssh - keygen命令生成,在生成后复制公共键的内容,并在此贴上公共键文本框,这里不多做介绍。
这里作者创建了一个名为Jackie的用户,并设置相应的密码,然后我们介绍这个用户组件的相应的配置。
组和文件系统:

用户组: SFTPGo支持创建用户组,用户可以通过用户组进行批量管理,在给用户组设置相应的权限后,属于相应的用户组的用户将继承用户组的权利,我相信每个人都明白这一点。它的创建方法与用户创建相似,因此,本条不介绍用户组的内容,大家去尝试即可。
文件系统: 用于设置SFTP/FTP/WebDAV用户家庭目录,需要一个绝对路径,并且可以空置。
在SFTPGo中,SFTP/FTP/WebDAV 用户的家目录存储在系统中的 /srv/sftpgo/data/<username> 文件夹下,因为当我们创建多克时,文件夹/srv/sftpgo/data已映射,所以我们可以在这里设置其他路径,不需要手动,直接留空即可。
默认情况下,每个用户只能访问自己的家庭目录,上传文件到自己的家庭目录,添加或修改文件,共享自己的文件,并通过登录到WebUI接口在自己的文件上执行相应的操作,如图所示:

虚拟文件夹和配额:
虚拟文件夹: 虚拟文件夹是本地文件系统和虚拟路径之间的映射.以下图为例,作者分别设置两个虚拟路径/share_media和/share_book。share_media和 share_book的虚拟文件夹都指先创建的本地文件夹共享(本地路径是/unraid/share)。

但需要注意的是,对一个用户来说,本地存储的文件夹只能与虚拟文件夹相符,所以当我们在这里点击提交在页面右下角提交用户创建的信息时,验证错误:文件夹"共享"被复制。
也就是说,在同一用户下,共享本地文件夹不能映射到多个虚拟文件夹中。

所以在这里我们可以选择删除一个虚拟文件夹,例如删除 share_media:

删除后:

配额:配额指用户可用于这个虚拟文件夹的存储空间(配额大小)和可上传的文件量(配额文件)。与惠集团的用户配额限制一样,以下图为广东新成立的用户使用50G фото书套件的空间(但不限制文件数目):

为了回应我们,我们限制了Jackie用户存储空间为10MB,不能上传超过两个文件:

存储空间的分配是单位字节,由于我们通常使用MB来计算大小,我们可以在网站上进行单位转换:

需要特别说明的是,如果配额大小或配额文件设置为-1,这意味着虚拟文件夹的配额仅限于用户的配额,这意味着只有这个用户有使用这个虚拟文件夹的权限,因此如果这个虚拟文件夹想被共享给其他用户使用,那么你不能把它设置为-1。
Profile (用户文件信息): 此设置可以设置用户激活状态,设置过期时间,API认证功能,以及其他相关的用户字符描述,而不需要特别注意。

ACLs (Access Control Lists, User Access Control Lists):在这个模块中,我们可以使用SFTPGo提供的各种复杂的权限控制设置来定义一个用户的具体权限范围。

如下图所示,我们可以从许可菜单上拉下,你可以猜出用户可以使用哪些权限(例如下载-下载权限,上传-上传权限,rename-file rename..),也可以保持默认*常数,为使这个用户使用所有权利,然后在ACLS模块中设置的其他权限,以覆盖相应的功能权限:

每个目录权限: SFTPGo允许设置虚拟权限,例如:

根据上图,我们限制Jackie用户在/read-only和/subdir路径下访问内容:虽然这个用户有默认的全权(即在允许权菜单中选择*),但是这个用户只能在/read-only路径下查看文件(列表,这个用户对/subdir的内容没有权利(即没有查看、下载、重命名、删除等权限的所有权),因为我们没有选择/subdir右边的权限列表中的任何权限。

每个目录模式限制:假设在/read-only路径中要限制用户权限到png和jpg图像(无法下载、修改等),所以你可以通过使用Per-directory模式限制来配置它。如下图所示:

该函数基于shell模板,相应的文件可以通过组合 、 字符集等匹配.例如, zip 、 txt 、 pdf 文件在/read-only 文件夹上被限制在上面的图中,虽然这些文件是可见的,用户不能修改、上传或下载这些文件。
其他设置:如下图,除了对特定文件夹的限制外,连接到SFTPGo服务器的用户也可以使用最大同时សម័យ(Max sessions)。拒绝协议(SSH, FTP, DAV, HTTP),拒绝登录方法,需要二次认证的协议(HTTP, SSH, FTP),拒绝和允许访问特定IP地址等。我不打算在这里进入细节。

磁盘配额和带宽限制: 此设置限制了用户可用的存储空间、上传的文件数目和带宽大小等一系列权限。
以前,当我们设置一个虚拟文件夹时,我们可以限制用户可用于虚拟文件夹的存储空间和文件量,但是如果虚拟文件夹的分配设置为-1,那么虚拟文件夹的分配限制在分配大小。


完成用户创建:大部分用户设置已经引入,我们只需要右下角单击提交,才能提交相关设置完成用户创建。
更新后切断用户意味着,如果您修改了该用户的相关设置并检查了此选项,所以如果这个用户上网,它会迫使用户退出,以此来让配置生效,用户可以重新登录并应用新的用户配置。

在前面的章节中,我们创建了一个名为Jackie的用户,现在我们可以使用这个用户登录到WebUI。
退出当前管理员用户:


单击WebClient,进入正常用户登录窗口:

输入用户帐户密码:


输入共享媒体文件夹:

单击“上传”箭头将文件上传到网上:

因为作者以前限制了向这个用户上传文件,限制这个用户(jackie)以ziptxtpdf格式上传文件,所以当你在这里上传这些类型的文件时,你会收到一个错误消息,建议拒绝权限的错误,告诉用户不要上传这种类型的文件:
Upload zip file time error
Upload zip file time error
Uploading txt file times error
Uploading txt file times error
除了上传文件外,您可以以网页的形式重新命名、删除和下载文件夹中的数据。


如上图所示,我们只需要选择要共享的文件,然后按共享按钮,然后在设置接口来配置相应的选项后,生成相应的共享选项,如下图所示:


这些链接的类型如下:

如果您共享文件夹,请按上图中的第二个链接浏览并以文件列表的形式共享:

如果设置最大トークン,那么当访问数超过最大トークン数时,则表示不能访问,因为共享访问数已经耗尽:


常见的FTP、SFTP和WebDAV软件包括RaiDrive和WinSCP,两者都在这里显示。
挂载 WebDAV
输入SFTPGo服务器IP地址和端口号(WebDAV是10080端口)并输入上传的帐户密码。
如果您不想在这里使用 https,因为我们正在上传到家庭网络,点击取消使用HTTP连接方法。


挂载 SFTP
挂载方式同理:


WinSCP同时支持多个文件协议,并且连接的方式是相同的。您可以通过输入相应的IP地址、帐户和密码来连接:



介绍了SFTPGo的一般应用.除本条所载内容外,还有许多值得研究和研究的功能。包括防护、防护功能、二级TLS验证、用户模板、API接口等,但本文没有介绍。如果读者感兴趣,他们可以到官方项目学习更多(官方文件写得非常详细)。
(完)
作者声明,本文无关紧要,欢迎有价值朋友的理性交流和和谐讨论
本文由 在线网速测试 整理编辑,转载请注明出处。