16.1 FTP 服务器
FTP 即 File Transfer Protocol(文件传输协议)。使用 FTP 服务搭建服务器可以快速传输文件。
Pure-FTPd(基于 MySQL)
警告
Pure-FTPD 已经移除了对 RFC 2640 的支持,所以 Windows 下使用 ftp 命令行处理 FTP 非英文相关文件会乱码,且无法修改编码。见 https://www.pureftpd.org/project/pure-ftpd/news/。
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 文件
/usr/local/etc/pure-ftpd.conf 文件生成配置文件
编辑配置文件并增加 mysql 的支持
配置 /usr/local/etc/pure-ftpd.conf 文件,以下项目修改如下:
配置 mysql
注意
本文基于 MySQL 8.x。关于 MySQL 的安装、基本设置请看其他章节。
请自行安装配置 mysql 8.x。
创建数据库
创建登录数据库用户及设置密码
测试数据库链接:
配置 /usr/local/etc/pureftpd-mysql.conf
/usr/local/etc/pureftpd-mysql.conf完整示例:
添加 ftp 组和用户
警告
使用数据库后,pure-pw 就没用了。
添加 FTP 登录用户(必须手动写入 mysql 数据库),以下命令创建的用户是
test。密码是test2。
注意
写入表的
Uid、Gid必须和上文pw useradd创建的用户一致。
技巧
基本思路就是写入数据库的虚拟用户会继承
pw useradd创建的用户的权限与 GID\UID,然后通过数据库中的用户来操作 FTP。下同。
实际操作示例:
配置 FTP 目录
参考文献
Linux 环境下 FTP 权限设置详解与操作步骤全攻略,775 权限设置来自此处
服务操作
参考文献
故障排除与未竟事宜
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
/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,这是通过以下规则完成的:
创建用户
出于安全目的,我们将以非 root 用户身份运行 Proftpd。因此,我们将创建此用户:
数据库相关
创建一个 MySQL 数据库和一个对创建的数据库具有完全访问权限的用户:
创建数据库用户和密码 (授权 proftpd 数据库):
创建数据表:
创建了:
FTP 用户名
testFTP 登录密码
FTPpassword_hereUID
1002GID
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-ssl
pam_pwdfile
一个 PAM 模块,允许使用纯文本密码文件进行用户身份验证。
apache24
提供了 htpasswd 命令
技巧
FreeBSD 系统中的
/etc/passwd仅起到兼容作用,并不实际使用。实际使用的是相关 db 数据库文件。
通过 Ports:
观察安装输出:
看到 vsftpd 会创建一个用户叫 ftp,查看该用户详情:
创建虚拟用户
以上:
用户名
ftptest密码
z组
ftp
配置 pam_pwdfile
创建文件
/etc/pam.d/vsftpd,写入:
创建密码数据库(我上面添加了用户
ftptest,密码是z)
后续再添加(可能需要再 adduser,未测试):
配置 vsftpd.conf
vsftpd.confvsftpd 主配置数据保存在 /usr/local/etc/vsftpd.conf,可直接修改。因为还有个备用的模板在 /usr/local/etc/vsftpd.conf.sample。
我们将 /usr/local/etc/vsftpd.conf 配置如下:
官网文档在此 VSFTPD.CONF,中文翻译在金步国的 vsftpd.conf 中文版。
vsftpd.chroot_list
vsftpd.chroot_list创建并编辑 /usr/local/etc/vsftpd.chroot_list,加入用户 ftptest
创建路径
服务管理
使用用户
ftptest,密码z登录 FTP 即可。vsftpd 日志在
/var/log/vsftpd.log
参考文献
连接到 FTP 服务器
简单示例:
使用 ftp 命令可以快速连接到 FTP 服务器。
用法:
FTP 命令:
实例:
FTP 默认下载路径是 C:\Users\你的用户名,我是 C:\Users\ykla。
最后更新于
这有帮助吗?