注:不同版本Pure-FTPd的参数及含义可能存在差异。
本案例场景:
ftp服务器TLS加密使用自签名证书,ftp帐号vftpuser1、vftpuser2用户目录如下,目录独立且相互隔离。
/data/ftp/vftpuser1
/data/ftp/vftpuser2
可对ftp帐号设置上传、下载速度,最大单文件大小等,避免服务器过载。
1 环境版本
CentOS Linux release 7.9.2009 (Core)
pure-ftpd-1.0.51.tar.gz
2 源码安装Pure-FTPd
2.1 安装依赖
yum install -y gcc gcc-c++ openssl-devel
2.2 下载源码
cd /usr/local/src
wget https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.51.tar.gz
tar zxvf pure-ftpd-1.0.51.tar.gz
cd pure-ftpd-1.0.51
2.3 编译安装
./configure \
–prefix=/app/pure-ftpd \
–with-tls \
–with-everything
make
make install
3 准备FTPS(TLS加密)证书
创建证书目录:
mkdir -p /app/pure-ftpd/etc/ssl/private
生成证书:
openssl req \
-x509 \
-newkey rsa:4096 \
-keyout /app/pure-ftpd/etc/ssl/private/pure-ftpd.key \
-out /app/pure-ftpd/etc/ssl/private/pure-ftpd.crt \
-days 3650 \
-nodes

合并:
cat /app/pure-ftpd/etc/ssl/private/pure-ftpd.key /app/pure-ftpd/etc/ssl/private/pure-ftpd.crt > /app/pure-ftpd/etc/ssl/private/pure-ftpd.pem
设置证书权限:
chmod 600 /app/pure-ftpd/etc/ssl/private/pure-ftpd.pem
4 配置Pure-FTPd
编辑配置文件:
vim /app/pure-ftpd/etc/pure-ftpd.conf
设置如下配置项:
ChrootEveryone yes //Restrict users to their home directory
NoAnonymous yes //Disallow anonymous connections
PureDB /app/pure-ftpd/etc/pureftpd.pdb //PureDB user database
VerboseLog yes //log all client commands
MaxClientsNumber 50 // Maximum number of simultaneous users
MaxClientsPerIP 10 // Maximum number of simultaneous clients with the same IP address
MaxIdleTime 15 // Maximum idle time in minutes (default = 15 minutes)
MinUID 1000 //Minimum UID for an authenticated user to log in.
PassivePortRange 30000 31000 //Port range for passive connections
ForcePassiveIP 192.168.195.213 //Force an IP address in PASV/EPSV replies
CertFile /app/pure-ftpd/etc/ssl/private/pure-ftpd.pem
TLS 2 //refuse connections that don’t use the TLS security mechanism
5 启动服务
5.1 创建systemd 服务
新建pure-ftpd.service 文件:
vi /etc/systemd/system/pure-ftpd.service
写入如下内容:
[Unit]
Description=Pure-FTPd FTP Server
After=network.target
[Service]
Type=forking
ExecStart=/app/pure-ftpd/sbin/pure-ftpd /app/pure-ftpd/etc/pure-ftpd.conf
ExecStop=/usr/bin/killall pure-ftpd
Restart=on-failure
[Install]
WantedBy=multi-user.target
保存文件退出。
重新加载 systemd:
systemctl daemon-reload
检查systemd:
systemctl list-unit-files | grep pure-ftpd
输出如下:
pure-ftpd.service disabled
5.2 启动服务
启动:systemctl start pure-ftpd
开机启动:systemctl enable pure-ftpd
查看状态:systemctl status pure-ftpd
6 创建FTP用户
6.1 创建Linux系统用户ftpuser
useradd -s /sbin/nologin ftpuser // PureDB虚拟用户必须绑定一个真实Linux系统用户
6.2 创建ftp数据目录并设置权限
mkdir -p /data/ftp
mkdir -p /data/ftp/vftpuser1
mkdir -p /data/ftp/vftpuser2
chown -R ftpuser:ftpuser /data/ftp
6.3 创建PureDB虚拟用户vftpuser1、vtpfuser2
pure-pw useradd vftpuser1 \
-u ftpuser \
-d /data/ftp/vftpuser1 \
-m

参数 含义
-u ftpuser 映射到Linux系统用户
-d 限制用户目录
-m 立即更新PureDB
6.4 生成并更新数据库
执行:pure-pw mkdb //若创建PureDB虚拟用户时没有加-m参数,需执行此步
会生成并更新:/app/pure-ftpd/etc/pureftpd.pdb
6.5 查看用户:pure-pw list

查看用户详细信息:pure-pw show vftpuser1

修改用户密码:pure-pw passwd vftpuser1
删除用户:pure-pw userdel vftpuser1
注:增删改用户及属性后,必须执行pure-pw mkdb更新数据库。
7 查看日志
journalctl -u pure-ftpd
查看实时日志:
journalctl -u pure-ftpd -f或者tail -f /var/log/messages
8 客户端连接测试
8.1 使用FileZilla Client
设置参数如下:
协议:FTP – FTP over TLS
主机:服务器IP
用户名:vftpuser1
密码:虚拟用户vftpuser1密码

点确定,连接出现证书提示,点确定。


此时服务器端可通过如下命令查看在线用户:pure-ftpwho

8.2 使用支持TLS的客户端 lftp
yum install -y lftp
lftp -e “set ssl:verify-certificate no” -u vftpuser1 ftp://192.168.195.213
或
lftp -e “set ssl:verify-certificate no; set ftp:ssl-force yes; set ftp:ssl-protect-data yes” -u vftpuser1 ftp://192.168.195.213
附录1:对虚拟用户可以作进一步限制
查看确认可以使用的参数:
/app/pure-ftpd/bin/pure-pw –help

限制上传单文件大小为10MB:
pure-pw usermod vftpuser1 -N 10
修改上传单文件大小为unlimited:
./pure-pw usermod vftpuser1 -N ”
./pure-pw mkdb
设置上传速率1MB/s、下载速率2MB/s:
./pure-pw usermod vftpuser1 -T 1024
./pure-pw usermod vftpuser1 -t 2048
./pure-pw mkdb

拒绝IP为192.168.195.185的vftpuser1客户端连接:
./pure-pw usermod vftpuser1 -R 192.168.195.185/32
解除限制:
pure-pw usermod vftpuser1 -R “”