FTP

来自 阿尔派 Linux

FTP(或 File Transfer Protocol 文件传输协议)是一种协议,允许您在服务器和客户端之间传输文件(因为 FTP 使用客户端-服务器架构)。FTP 是最古老的协议之一,其起源可以追溯到 1971 年,根据 RFC 114

FTP 也存在变体,包括 SFTP(SSH FTP,不要与 Simple FTP 混淆)和 FTPS(带有 TLS 的 FTP)。顾名思义,SFTP 是通过 SSH 完成的。FTPS 是带有 TLS 加密的普通 FTP。

阿尔派 Linux 有多种 FTP 客户端和服务器,您可以安装和使用,包括以下内容

也存在许多其他客户端,但上面提到的客户端是唯一涵盖的客户端。有关更多详细信息,请参见 #客户端

服务器

vsftpd

在 阿尔派 Linux 中,默认的 FTP 服务器是 vsftpd。但是,由于常见的托管面板不处理其配置管理,因此它没有被广泛使用。另一方面,vsftpd 更安全,不需要太多更新。

vsftpd 还声称它是“最安全和最快的类 UNIX 系统的 FTP 服务器”。它是 NimbleX、Slackware 和许多其他 Linux 发行版中的默认 FTP 服务器。此外,由于配置相对容易,因此也推荐使用它。

以下是 vsftpd 具有的功能列表

功能 值/名称 注释
配置文件 /etc/vsftpd/vsftpd.conf 默认配置是 vsftpd 的默认配置
文件默认路径 /var/lib/ftp 由于默认启用匿名访问,因此这是守护程序的默认主目录
日志文件 /var/log/vsftpd.log 可在 vsftp.conf 中配置
运行服务的用户 vsftpd 阿尔派 没有 ftp 用户;它使用同名的组代替。
常用组 vsftpd 用于在其他守护程序或服务(如 Redis 或 Apache)之间共享内容

局限性

  • 不支持 SFTP

安装

要安装和运行 vsftpd,只需运行 apk add vsftpd。可以选择同时安装 vsftpd-doc 软件包以获取文档。

要在启动时启用 vsftpd 并立即启动它,请运行以下命令。

rc-update add vsftpd default
rc-service vsftpd start

配置

默认配置并不理想,因为默认情况下启用了匿名访问,并且仅启用了 IPv4 支持。因此,不应在生产环境中使用默认配置。一些常见的服务器配置方案包括允许匿名访问文件、用户系统 FTP 服务和虚拟用户(在服务器端)。

可以使用 vsftp.conf 文件中的特殊指令 user_sub_token 来支持每个用户的 FTP 文件。例如,如果启用它(过程在后面的“vsftpd 配置”部分中描述),则可以将其设置为类似于 /home/$USER/public_ftp 的内容

管理 vsftpd

启动 vsftpd:安装后,vsftpd 未运行。正如我们在第一节中所说,已经启动了,但如果您想手动启动 vsftpd,请使用

rc-service vsftpd start

如果启动 vsftpd 顺利,您应该看到类似于以下的输出

 * Caching service dependencies ...                           [ ok ]
 * Starting vsftpd...                                         [ ok ]

停止 vsftpd:如果您想停止 Web 服务器,请以与上一个命令相同的方式使用 stop

rc-service vsftpd stop

重启或重新加载 vsftpd:更改配置文件后,您必须重启或重新加载 vsftpd,新配置才能生效。您可以运行以下命令之一来实现所需的效果

rc-service vsftpd restart

rc-service vsftpd reload

后者重新加载 vsftpd 的配置文件,而前者完全重启 vsftpd。后者可能是首选,因为它避免了必须完全重新加载 vsftpd。

如果您重启了 vsftpd,则应该有类似于以下的输出

 * Stopping vsftpd...                                         [ ok ]
 * Starting vsftpd...                                         [ ok ]

如果您重新加载了 vsftpd,则输出将类似于以下内容

 * Reloading vsftpd...                                        [ ok ]

使用正确的运行级别:在大多数情况下,使用“default”运行级别应该可以工作,尽管可能存在自定义运行级别,并且将 vsftpd 添加到“default”以外的运行级别可能更可取。但是,请记住,运行级别在 Docker 容器中不存在,因为 阿尔派 主要用于 Docker 中。

要将 vsftpd 添加到运行级别,请使用以下命令

rc-update add vsftpd [运行级别]

其中 [运行级别] 是您要将 vsftpd 服务添加到的运行级别的名称。例如,如果您想将 vsftpd 添加到“default”运行级别,请运行 rc-update add vsftpd default


测试 vsftpd

本节假设 vsftpd 正在运行。目前,可能没有允许或甚至可用的 ftp 用户,但服务器已启动并正在运行。

您可以使用 netcat 来测试是否成功连接到服务器

nc -zv [服务器地址]

请务必将 [服务器地址] 更改为服务器的实际 IP 地址。如果服务器正在运行,则常见响应将为 OPEN。如果您收到其他响应,请检查您的服务器配置。

客户端

由于 FTP 使用客户端-服务器架构,如果您想与 FTP 服务器交互,则需要 FTP 客户端。阿尔派 提供了几个用于命令行 FTP 客户端的软件包

如果您喜欢图形客户端,请查看以下内容

一些 Web 浏览器也支持 FTP,尽管大多数主流浏览器(如 Chrome 和 Firefox)已删除对该协议的支持。

lftp

lftp 是一个复杂的的文件传输程序,支持多种网络协议,包括 FTP、HTTP、SFTP、FISH 和 BitTorrent。它还具有以下功能

  • 作业控制
  • 支持书签
  • 支持内置的 mirror 命令
  • 支持并行文件传输
  • 使用 readline 进行输入
功能 值/名称 注释
软件包名称 lftp 安装:apk add lftp
手册页和 -doc 软件包 vsftpd-doc 安装:apk add lftp-doc
系统配置文件 /etc/lftp.conf 阿尔派 几乎没有进行自定义
用户配置文件 ~/.lftprc, ~/.lftp/rc 前者首先读取,而后者在未找到前者时第二个读取。

安装

要安装 lftp,请运行 apk add lftp

自 阿尔派 3.6 以来,lftp 已在主存储库中提供,因此它是一个受支持的软件包,可以用于生产环境。

配置

主配置文件 /etc/lftp.conf 带有不同的示例和注释。在启动时,lftp 按确切的顺序读取 /etc/lftp.conf~/.lftprc~/.lftp/rc。这些文件用于设置系统范围和用户特定的设置。

在配置文件中,使用命令 set,后跟设置的名称,再后跟其值。布尔值使用 on/off

set ftp:ssl-force on
set ssl:verify-certificate on
set ftp:use-feat off
set ftp:ssl-protect-data on

可以仅为特定服务器设置特定设置。在特定服务器的服务器名称前添加斜杠 (/)。

set ftp:use-feat off /example.com
set ftp:ssl-force on /example.com
注意: dns:net:ftp:http:hftp: 域变量的闭包当前只是您在 open 命令中指定的主机名(在某些闭包无意义的例外情况下,例如 dns:cache-size)。对于某些 cmd: 域变量,闭包是当前 URL,不带路径。对于其他变量,当前未使用。请参阅示例 lftp.conf 中的示例。

更多信息

默认情况下,lftp 对于在后台执行的操作不是很详细。如果您想要更多输出,可以使用 'debug' 命令(不带 'set' 命令)

  • debug 5 将显示完整的调试输出。
  • debug 3 将仅显示问候消息和错误消息。

请注意,从命令行使用 -d 开关将覆盖任何先前的调试设置,并将显示完整的调试输出。

如果您希望某些命令使用另一个名称调用,则可以使用 alias 命令设置别名。语法如下

alias [name] [command]


[name] 是 lftpd 别名的名称,[command] 是 lftpd 命令的名称。下面显示了几个示例

alias dir ls
alias less more
alias zless zmore
alias bzless bzmore
alias reconnect "close; cache flush; cd ."
alias edit "eval -f "get $0 -o ~/.lftp/edit.tmp.$$ && shell \\"cp -p ~/.lftp/edit.tmp.$$ ~/.lftp/edit.tmp.$$.orig && vim ~/.lftp/edit.tmp.$$ && test ~/.lftp/edit.tmp.$$ -nt ~/.lftp/edit.tmp.$$.orig\\" && put ~/.lftp/edit.tmp.$$ -o $0; shell rm -f ~/.lftp/edit.tmp.$$*"

最后一个别名应全部在一行中。它获取远程文件,使用 vim 打开它,并将修改后的文件放回服务器上。当需要快速编辑和更新远程服务器上的文件时,这可能非常方便。

使用示例

以下是通过 SFTP 进行多部分下载的示例

$ lftp -e 'pget -c -n 5 /path/to/file' sftp://username@server

分解

  • -e:执行命令
  • pget:部分下载的命令,以及其选项
    • -c:恢复选项
    • -n:部分数量的选项
  • sftp://username@server:服务器 URL

带有 GVfs 的 PCManFM

您可以将 PCManFM 文件管理器与 gvfs 插件用作图形 FTP 客户端。要连接到 FTP 服务器,您可以执行以下操作

  1. 从菜单栏中,转到 Go > 连接到服务器
  2. 选择 FTP 协议并输入您的用户名(路径是可选的)
  3. 稍后,您将输入您输入的用户名的密码

参见