16.1 FTP 服务器

FTP 即 File Transfer Protocol(文件传输协议)。通过搭建 FTP 服务器可以实现文件的快速传输。

Pure-FTPd(基于 MySQL)

Pure-FTPd 不支持中文环境

Pure-FTPd 已移除对 RFC 2640(Internationalization of the File Transfer Protocol,FTP 协议的国际化)的支持,因此在 Windows 系统下使用 ftp 命令行访问包含非英文字符的文件可能出现乱码,且无法修改编码。参见 Version 1.0.48 released

FTP 服务器发送原始命令 OPTS UTF8 ON,请求启用 UTF-8 编码:

ftp> quote opts utf8 on
504 Unknown command

在 FreeBSD 中使用命令行或 WinSCP 等客户端测试 Pure-FTPd 时,不会出现乱码问题。

安装

由于通过 pkg 安装的包不包含数据库支持功能,因此需要通过 ports 来安装该软件:

# cd /usr/ports/ftp/pure-ftpd
# make config

在配置过程中选择 MYSQL,其余选项保持默认并回车确认即可:

配置 /usr/local/etc/pure-ftpd.conf 文件

生成配置文件

编辑配置文件并增加 mysql 的支持

编辑 /usr/local/etc/pure-ftpd.conf 文件,按如下方式修改相关配置项:

配置 MySQL

本文以 MySQL 8.x 为基础。有关 MySQL 的安装和基本配置,请参见其他章节。

请自行安装配置 MySQL 8.x。

创建数据库

创建登录数据库用户及设置密码

测试数据库连接。

使用 pftp 用户连接本地主机上的 pureftpd 数据库,系统提示输入密码:

配置文件 /usr/local/etc/pureftpd-mysql.conf

/usr/local/etc/pureftpd-mysql.conf 文件完整示例:

添加 ftp 组和用户

警告

使用数据库后,pure-pw 命令就不生效了。

  • 添加 FTP 登录用户(必须手动写入 mysql 数据库),以下命令创建的用户是 test。密码是 test2

注意

写入表中的 UidGid 必须与之前通过 pw useradd 创建的用户保持一致。

技巧

基本思路是数据库中的虚拟用户将继承 pw useradd 创建的用户的权限及 GID/UID,然后通过数据库中的用户进行 FTP 操作。以下内容同理。

实际操作示例:

  • 配置 FTP 目录

参考文献

服务操作

参考文献

故障排除与未竟事宜

  • Pure-FTPd 日志在 /var/log/messages

ProFTPD(基于 MySQL)

技巧

ProFTPD 在 Windows 自带的 FTP 链接下不会乱码。

安装 ProFTPD

注意

本文基于 MySQL 8.0。关于 MySQL 的安装、基本设置请看其他章节。

请自行安装配置 MySQL 8.x——需要与 proftpd-mod_sql_mysql 安装的 databases/mysql8X-client 版本相一致。

ProFTPD 配置文件 /usr/local/etc/proftpd.conf

  • 编辑 ProFTPD 的配置文件 /usr/local/etc/proftpd.conf 如下

技巧

示例文件参见 /usr/local/etc/proftpd.conf.sample

  • 创建一个目录来存储 FTP 服务器的日志:

警告

如果不 手动 创建目录(即使系统已自动创建,也建议再次手动创建),会提示 proftpd[3435]: warning: handling possibly truncated configuration data at line 65 of '/usr/local/etc/proftpd.conf'

技巧

ProFTPD 配置文件 /usr/local/etc/proftpd.conf 有语法检查命令 proftpd -t -d5

在本设置中,服务器将在主动模式下使用端口 21,在被动模式下使用 50000-60000 范围的端口。应确保这些端口在防火墙中已开放。

对于 PF 防火墙,这是通过以下规则完成的。

允许从外部接口 $ext_if(读者需要替换成自己的网络接口)到本机端口 21 及 50000-60000 的 TCP 入站流量:

创建用户

出于安全目的,我们将以非 root 用户身份运行 Proftpd。因此,我们将交互式地添加一位新用户:

数据库相关

  • 创建一个 MySQL 数据库和一个对创建的数据库具有完全访问权限的用户:

  • 创建数据库用户和密码 (授权 proftpd 数据库):

  • 创建数据表:

创建了:

  • FTP 用户名 test

  • FTP 登录密码 FTPpassword_here

  • UID 1002

  • GID 1002

警告

上面的 UID GID 必须与 proftpd 用户相同!否则只能读不能写!

你可以通过以下方式确定用户 proftpd 的 UID、GID 及所属组信息:

  • 测试数据库链接:

创建一个目录和一个测试 FTP 用户,将创建的目录指定为用户目录:

服务操作

使用用户 test,密码 FTPpassword_here 登录 FTP 即可。

vsftpd

vsftpd 即 Very Secure FTP Daemon(非常安全的 FTP 守护进程)。在 Linux 上比较流行。经过测试在 Windows 上 FTP 客户端中也不会乱码。

安装 vsftpd

  • 通过 pkg 安装

名称
说明

vsftpd-ssl

带 SSL 支持的 vsftpd 包

pam_pwdfile

一个 PAM 模块,允许使用纯文本密码文件进行用户身份验证。

apache24

提供了 htpasswd 命令

技巧

在 FreeBSD 系统中,/etc/passwd 仅用于兼容性目的,实际认证使用的是相应的数据库文件。

  • 通过 Ports:

观察安装输出:

看到 vsftpd 会创建一个用户叫 ftp,查看用户 ftp 的 UID、GID 及所属组信息:

创建虚拟用户

交互式添加新用户:

以上:

  • 用户名 ftptest

  • 密码 z

  • ftp

配置 pam_pwdfile

  • 创建文件 /etc/pam.d/vsftpd,写入:

  • 创建密码数据库(我上面添加了用户 ftptest,密码是 z

创建或覆盖 vsftpd 登录数据库,添加用户 ftptest 并设置密码为 z

后续再添加(可能需要再 adduser,未测试):

向现有 vsftpd 登录数据库添加新用户及密码。

配置 vsftpd.conf

vsftpd 的主配置文件位于 /usr/local/etc/vsftpd.conf,可直接进行修改;同时还提供了一个备用模板文件 /usr/local/etc/vsftpd.conf.sample

/usr/local/etc/vsftpd.conf 配置修改为如下内容:

官网文档在此 VSFTPD.CONF,中文翻译在金步国的 vsftpd.conf 中文版

vsftpd.chroot_list

创建并编辑 /usr/local/etc/vsftpd.chroot_list,加入用户 ftptest

创建路径

服务管理

  • 使用用户 ftptest,密码 z 登录 FTP 即可。

  • vsftpd 日志在 /var/log/vsftpd.log

参考文献

连接到 FTP 服务器

简单示例:

测试本地主机 FTP 服务是否在端口 21 上可用。


使用 ftp 命令可以快速连接到 FTP 服务器。

用法:


FTP 命令:

操作示例:

FTP 默认下载路径是 C:\Users\你的用户名,笔者的下载路径是 C:\Users\ykla

最后更新于