本教程适用于以下操作系统版本

  • Ubuntu 24.04(Noble Numbat)
  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 10.10(Maverick Meerkat)

本页内容

  • 安装 Pure-FTPd 的前置条件
  • Pure-FTPd 分步安装 更新系统软件包 安装 Pure-FTPd
  • 配置 Pure-FTPd 以增强安全性 搭建安全环境 管理用户访问 配置 TLS 实现安全数据传输
  • 高级配置选项 示例
  • 监控与维护
  • 更新系统软件包
  • 安装 Pure-FTPd
  • 搭建安全环境
  • 管理用户访问
  • 配置 TLS 实现安全数据传输
  • 示例

Pure-FTPd 是一款免费(BSD 许可)、安全、可用于生产环境且符合标准的 FTP 服务器。它不提供多余的花哨功能,而是专注于效率与易用性。本指南提供在 Ubuntu 上安装和配置 Pure-FTPd 的分步流程。

安装 Pure-FTPd 的前置条件

在继续安装之前,请确保你已具备:

  • 已搭建好的 Ubuntu 服务器
  • 拥有具备 sudo 权限的用户账户访问权

Pure-FTPd 的分步安装

更新系统软件包

首先,更新系统的软件包列表:

sudo apt update

安装 Pure-FTPd

接下来,使用以下命令安装 Pure-FTPd:

sudo apt install pure-ftpd

配置 Pure-FTPd 以增强安全性

搭建安全环境

为 FTP 用户创建一个专用组:

sudo groupadd ftpgroup

为 Pure-FTPd 创建一个用户:

sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser

管理用户访问

要向 FTP 服务器添加用户:

sudo pure-pw useradd [username] -u ftpuser -g ftpgroup -d /home/ftpusers/[username]
sudo pure-pw mkdb

将 [username] 替换为你想要的用户名。

配置 TLS 实现安全数据传输

生成自签名证书:

sudo openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

修改 Pure-FTPd 配置以启用 TLS:

echo 1 | sudo tee /etc/pure-ftpd/conf/TLS
sudo service pure-ftpd restart

高级配置选项

以下是在 Ubuntu 的 /etc/pure-ftpd/conf/ 目录中可为 Pure-FTPd 配置的常见设置列表。配置文件名以粗体显示。

  • AltLog:指定替代日志方法。例如,AltLog clf:/var/log/pureftpd.log 会以 W3C 格式记录传输。
  • AnonymousOnly:启用后(通过创建名为 AnonymousOnly 的文件),服务器仅允许匿名登录。
  • AntiWarez:若此文件存在,则禁止用户上传服务器上已存在的文件。
  • AutoRename:当存在同名文件时,自动重命名上传的文件。
  • Bind:将服务器绑定到指定的 IP 地址和端口。例如,Bind 21 绑定到所有可用地址的 21 端口。
  • BrokenClientsCompatibility:启用与未严格遵守 FTP 标准的 FTP 客户端的兼容性。
  • ChrootEveryone:启用后,将所有用户限制在其主目录中。
  • CreateHomeDir:当用户登录时,若主目录不存在则自动创建。
  • CustomerProof:增强对客户端配置和命令中常见错误的容错能力。
  • Daemonize:当此文件存在时,Pure-FTPd 将以守护进程方式运行。
  • DisplayDotFiles:控制是否显示点文件(隐藏文件)。
  • DontResolve:阻止用于日志记录和带宽控制的 DNS 解析,从而提升性能。
  • ExtAuth:指定用于用户认证的外部程序。
  • ForcePassiveIP:强制服务器向被动模式客户端报告指定的 IP 地址。
  • FSCharset:设置文件系统字符集,对非 ASCII 文件名很有用。
  • IPv4Only 或 IPv6Only:限制服务器仅监听 IPv4 或 IPv6 地址。
  • KeepAllFiles:禁止删除服务器上的任何文件。
  • LDAPConfigFile:指定用于认证的 LDAP 配置文件路径。
  • LimitRecursion:限制目录列表中的递归深度和显示的文件数量。
  • MaxClientsNumber:限制同时连接的最大客户端数量。
  • MaxClientsPerIP:限制来自单个 IP 地址的并发连接数量。
  • MaxDiskUsage:限制磁盘使用百分比。
  • MaxIdleTime:设置断开客户端连接前的最大空闲时间(分钟)。
  • MaxLoad:当系统负载超过一定值时断开客户端或拒绝新连接。
  • MinUID:设置登录所需的最小 UID。UID 较低的用户无法登录。
  • MySQLConfigFile:指定用于基于数据库认证的 MySQL 配置文件路径。
  • NoAnonymous:若此文件存在,则禁用匿名登录。
  • NoChmod:禁用服务器上的 CHMOD 命令。
  • NoRename:禁止用户重命名文件。
  • PassivePortRange:定义被动连接使用的端口范围(例如 30000 35000)。
  • PerUserLimits:按用户设置限制。
  • PureDB:指定 PureDB 用户数据库文件路径。
  • Quota:设置用户配额限制。
  • SyslogFacility:定义用于日志记录的 syslog 设施。
  • TLSCipherSuite:指定加密连接所允许的 TLS 密码套件。
  • TrustedGID:指定用于登录的可信组 ID 列表。
  • UMask:设置文件创建的默认 umask。
  • UnixAuthentication:启用针对 UNIX 密码数据库的认证。
  • UploadScript:指定在上传成功后运行的脚本。

此列表涵盖了最常用的配置选项,但并不详尽。请始终参考 Pure-FTPd 官方文档或使用

pure-ftpd-wrapper --help

命令以获取最准确、最全面的信息。

示例

以下是 /etc/pure-ftpd/conf/ 中 Pure-FTPd 设置的列表,并附有示例以说明它们接受的值类型:

  • AltLog:AltLog clf:/var/log/pureftpd.log 示例:clf:/var/log/pureftpd.log
  • AnonymousOnly:通过创建名为 AnonymousOnly 的文件启用。无需取值。
  • AntiWarez:通过创建名为 AntiWarez 的文件启用。无需取值。
  • AutoRename:通过创建名为 AutoRename 的文件启用。无需取值。
  • Bind:Bind 21 示例:192.168.0.1,21
  • BrokenClientsCompatibility:通过创建名为 BrokenClientsCompatibility 的文件启用。无需取值。
  • ChrootEveryone:通过创建名为 ChrootEveryone 的文件启用。无需取值。
  • CreateHomeDir:通过创建名为 CreateHomeDir 的文件启用。无需取值。
  • CustomerProof:通过创建名为 CustomerProof 的文件启用。无需取值。
  • Daemonize:通过创建名为 Daemonize 的文件启用。无需取值。
  • DisplayDotFiles:通过创建名为 DisplayDotFiles 的文件启用。无需取值。
  • DontResolve:通过创建名为 DontResolve 的文件启用。无需取值。
  • ExtAuth:ExtAuth /path/to/authenticator 示例:/usr/local/bin/myauth
  • ForcePassiveIP:ForcePassiveIP 192.168.0.1 示例:192.168.0.1
  • FSCharset:FSCharset utf-8 示例:utf-8
  • IPv4Only 或 IPv6Only:通过创建名为 IPv4Only 或 IPv6Only 的文件启用。无需取值。
  • KeepAllFiles:通过创建名为 KeepAllFiles 的文件启用。无需取值。
  • LDAPConfigFile:LDAPConfigFile /etc/pure-ftpd/ldap.conf 示例:/etc/pure-ftpd/ldap.conf
  • LimitRecursion:LimitRecursion 10000 8 示例:10000 8(10000 个文件,8 层深度)
  • MaxClientsNumber:MaxClientsNumber 50 示例:50
  • MaxClientsPerIP:MaxClientsPerIP 8 示例:8
  • MaxDiskUsage:MaxDiskUsage 95 示例:95(95%)
  • MaxIdleTime:MaxIdleTime 15 示例:15(15 分钟)
  • MaxLoad:MaxLoad 4.0 示例:4.0
  • MinUID:MinUID 1000 示例:1000
  • MySQLConfigFile:MySQLConfigFile /etc/pure-ftpd/mysql.conf 示例:/etc/pure-ftpd/mysql.conf
  • NoAnonymous:通过创建名为 NoAnonymous 的文件启用。无需取值。
  • NoChmod:通过创建名为 NoChmod 的文件启用。无需取值。
  • NoRename:通过创建名为 NoRename 的文件启用。无需取值。
  • PassivePortRange:PassivePortRange 30000 35000 示例:30000 35000
  • PerUserLimits:PerUserLimits 8 示例:8(每个用户 8 个并发连接)
  • PureDB:PureDB /etc/pure-ftpd/pureftpd.pdb 示例:/etc/pure-ftpd/pureftpd.pdb
  • Quota:Quota 1000M 示例:1000M(1000 兆字节)
  • SyslogFacility:SyslogFacility ftp 示例:ftp
  • TLSCipherSuite:TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3 示例:HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3
  • TrustedGID:TrustedGID 1000 示例:1000
  • UMask:UMask 133:022 示例:133:022(文件:133,目录:022)
  • UnixAuthentication:通过创建名为 UnixAuthentication 的文件启用。无需取值。
  • UploadScript:UploadScript /path/to/script 示例:/usr/local/bin/uploadscript
  • 示例:clf:/var/log/pureftpd.log
  • 无需取值。
  • 无需取值。
  • 无需取值。
  • 示例:192.168.0.1,21
  • 无需取值。
  • 无需取值。
  • 无需取值。
  • 无需取值。
  • 无需取值。
  • 无需取值。
  • 无需取值。
  • 示例:/usr/local/bin/myauth
  • 示例:192.168.0.1
  • 示例:utf-8
  • 无需取值。
  • 无需取值。
  • 示例:/etc/pure-ftpd/ldap.conf
  • 示例:10000 8(10000 个文件,8 层深度)
  • 示例:50
  • 示例:8
  • 示例:95(95%)
  • 示例:15(15 分钟)
  • 示例:4.0
  • 示例:1000
  • 示例:/etc/pure-ftpd/mysql.conf
  • 无需取值。
  • 无需取值。
  • 无需取值。
  • 示例:30000 35000
  • 示例:8(每个用户 8 个并发连接)
  • 示例:/etc/pure-ftpd/pureftpd.pdb
  • 示例:1000M(1000 兆字节)
  • 示例:ftp
  • 示例:HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3
  • 示例:1000
  • 示例:133:022(文件:133,目录:022)
  • 无需取值。
  • 示例:/usr/local/bin/uploadscript

这些示例应当能阐明如何在 Pure-FTPd 中配置各种选项。

监控与维护

定期检查 /var/log/pure-ftpd/ 中的日志,留意任何异常活动或错误。