前言
vsftpd 的权限配置非常强大,但对于一般用户而言可能较为复杂。笔者长期使用 vsftpd,虽然知道还有其他 FTP 服务器软件,但一直未曾尝试。近期在一台 VPS 上需要配置 FTP 服务,便决定尝试一下 Pure-FTPd。
安装 Pure-FTPd
在 CentOS 7 系统上,可以使用 yum 包管理器进行安装:
yum install pure-ftpd -y
配置 Pure-FTPd
主要的配置文件位于 /etc/pure-ftpd/pure-ftpd.conf。以下是一些关键配置项的说明与建议设置。
核心安全与访问控制
- ChrootEveryone: 设置为
yes,限制所有用户只能访问其主目录,增强安全性。 - NoAnonymous: 设置为
yes,禁止匿名登录,仅允许认证用户访问。 - PAMAuthentication: 设置为
yes,启用 PAM 认证。 - MinUID: 设置为
1000,仅允许 UID 大于等于 1000 的系统用户登录(CentOS/RHEL 7 中普通用户的 UID 通常从此开始)。 - UseFtpUsers: 设置为
no,不使用/etc/ftpusers文件来禁用账户(已通过 MinUID 进行限制)。
连接与性能设置
- MaxClientsNumber: 设置最大并发客户端连接数,例如
10。 - MaxClientsPerIP: 设置单个 IP 地址的最大连接数,例如
8。 - PassivePortRange: 设置被动模式使用的端口范围,例如
31888 36888。请确保防火墙已开放此端口范围。 - Daemonize: 设置为
yes,以守护进程方式运行。
日志与文件系统
- VerboseLog: 建议设置为
no,除非需要详细记录所有客户端命令。 - AltLog: 可以启用,例如
clf:/var/log/pureftpd.log,以 Apache 通用日志格式记录传输日志。 - FileSystemCharset 与 ClientCharset: 均设置为
UTF-8,以支持中文等非 ASCII 字符的文件名。 - Umask: 设置文件创建掩码,例如
133:022。
其他常用选项
- PureDB: 取消注释并设置为
/etc/pure-ftpd/pureftpd.pdb,这是存储虚拟用户信息的数据库文件。 - IPV4Only: 设置为
yes,如果只需要 IPv4 连接。 - CreateHomeDir: 设置为
no,不自动创建不存在的用户主目录。
修改完配置后,建议备份原文件。
创建系统用户与组
为 FTP 服务创建一个专用的系统用户和组(如果不存在):
groupadd -f ftpgroup
useradd -g ftpgroup ftpuser
管理虚拟用户
Pure-FTPd 使用虚拟用户系统,用户信息存储在独立的数据库中。
添加虚拟用户
以下命令创建一个名为 ftpnow 的虚拟用户,并将其映射到系统用户 ftpuser,同时指定其 FTP 根目录:
pure-pw useradd ftpnow -u ftpuser -d /whoisyourdaddy -m
执行后会提示输入并确认该虚拟用户的密码。-m 选项会将用户信息写入 PureDB 数据库。
设置目录权限
将 FTP 根目录的所有权赋予对应的系统用户和组:
chown ftpuser:ftpgroup /whoisyourdaddy -R
更新用户数据库
在添加或修改用户后,需要重建数据库索引:
pure-pw mkdb
其他用户管理命令
- 删除用户:
pure-pw userdel ftpnow -m(保留家目录,需手动删除) - 修改用户密码:
pure-pw passwd ftpnow -m - 查看用户信息:
pure-pw show ftpnow
服务管理
在 CentOS 7 及更高版本中,使用 systemctl 管理服务:
- 启动服务:
systemctl start pure-ftpd.service - 停止服务:
systemctl stop pure-ftpd.service - 重启服务:
systemctl restart pure-ftpd.service - 查看状态:
systemctl status pure-ftpd.service - 设置开机自启:
systemctl enable pure-ftpd.service
常见问题:530 登录认证失败
如果连接时出现“530 Login authentication failed”错误,请检查系统日志:
cat /var/log/messages | grep pure-ftpd
常见原因之一是虚拟用户映射的系统用户 UID 小于 pure-ftpd.conf 中 MinUID 设置的值(默认为 1000)。
解决方案:
- 确保用于映射的系统用户(如
ftpuser)的 UID 大于等于MinUID的值。可以使用id ftpuser命令查看。 - 或者,根据实际情况调整
pure-ftpd.conf中的MinUID值(不推荐设为过低的值,如 0)。
总结
Pure-FTPd 的配置文件结构清晰,选项说明详细,相较于 vsftpd 在某些场景下配置更为直观。其虚拟用户系统能将 FTP 账户与系统账户分离,提升了安全性。对于需要快速部署一个安全、易管理的 FTP 服务器的用户来说,Pure-FTPd 是一个不错的选择。