本教程适用于以下操作系统版本
- 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/ 中的日志,留意任何异常活动或错误。