CentOS 7.9下安装配置Pure-FTPd

注:不同版本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 “”